Wie verknüpfe ich mehrere Abfragen?

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

ladiko
Beiträge: 3
Registriert: Di, 25.08.2009 09:01

Wie verknüpfe ich mehrere Abfragen?

Beitrag von ladiko »

Ich habe eine Tabelle "Tiere" in der Form

Code: Alles auswählen

ID Ort    Geburtsdatum Gattung
=======================================
1  Bern   01.05.2009   Hund
2  Zürich 02.06.2009   Katze
3  Genf   05.06.2009   Maus
4  Bern   21.06.2009   Hund
5  Genf   10.06.2009   Maus
6  Genf   14.08.2009   Hund
Dazu folgende Abfragen:

2009-06_Gesamt:

Code: Alles auswählen

SELECT                                        
    "Ort",                                     Ort    COUNT("ID")
    COUNT("ID")                                ==================
FROM                                           Bern   2
    "Tiere"                        -->         Genf   3
WHERE                                          Zürich 1
    MONTH( "Geburtsdatum" ) = 6                              
GROUP BY                                        
    "Ort"                                        
ORDER BY                                        
    "Ort" ASC
2009-06_Hund:

Code: Alles auswählen

SELECT                                                               
    "Ort",                                                               
    COUNT("ID")                                                        
FROM                                                        
    "Tiere"                                                     Ort  COUNT("ID")
WHERE                                                           ================
    MONTH( "Geburtsdatum" ) = 6 AND "Gattung" = 'Hund'   -->    Bern 2
GROUP BY                                                        Genf 1
    "Ort"
ORDER BY
    "Ort" ASC
Diese möchte ich nun verknüpfen so dass ich eine Abfrage habe in der in der ersten Spalte der Ort steht, in der nächsten die zugehörige Anzahl aller Tiere und danach eine Spalte in der nur die Anzahl der Hunde steht und dann je noch eine für Katzen und Mäuse, aber ich scheitere schon an diesem einfachen Beispiel in dem nur die Gesamtzahl und die Hunde auftauchen:

Code: Alles auswählen

SELECT
    "2009-06_Gesamt"."Ort" AS "Ort"
    COUNT("2009-06_Gesamt"."ID") AS "Gesamt",
    COUNT("2009-06_Hund"."ID") AS "Hund",
FROM
    "2009-06_Gesamt" INNER JOIN "2009-06_Hund",
    ON "2009-06_Gesamt.Ort" = "2009-06_Hund.Ort"
leider bekomm ich einen sql syntax error, leider ohne genauere angaben und google hilft mir leider auch nicht weiter um die beiden listen zu verknüpfen. Kann man die drei abfragen eigentlich auch irgendwie in eine packen?
Zuletzt geändert von ladiko am Di, 25.08.2009 12:18, insgesamt 1-mal geändert.
pmoegenb
********
Beiträge: 4330
Registriert: Di, 22.06.2004 12:02
Wohnort: 71134 Aidlingen
Kontaktdaten:

Re: Wie verknüpfe ich mehrere Abfragen?

Beitrag von pmoegenb »

Du kannst nicht mit einer neuen Abfrage auf bestehende/gespeicherte Abfragen zugreifen.

Du kannst aber mehrere SQL-Abfragen miteinander verknüpfen. Alles weitere siehe http://sql.1keydata.com/de/sql-union.php
Gruß

Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
ladiko
Beiträge: 3
Registriert: Di, 25.08.2009 09:01

Re: Wie verknüpfe ich mehrere Abfragen?

Beitrag von ladiko »

wieso bietet mir der abfragen-assistent dann an, dass ich zwischen tabellen und bestehenden abfragen als quelle wählen kann?

das ergebnis soll dann quasi so aussehen:

Code: Alles auswählen

Ort    Gesamt Hunde Katzen Mäuse
=============================
Bern   2      2            1
Genf   3      1            1
Zürich 1            1
pmoegenb
********
Beiträge: 4330
Registriert: Di, 22.06.2004 12:02
Wohnort: 71134 Aidlingen
Kontaktdaten:

Re: Wie verknüpfe ich mehrere Abfragen?

Beitrag von pmoegenb »

Die Frage kann ich Dir nicht beantworten, ich arbeite nicht mit Assistenten sondern gebe die SQL-Klausel direkt ein.
Gruß

Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
ladiko
Beiträge: 3
Registriert: Di, 25.08.2009 09:01

Re: Wie verknüpfe ich mehrere Abfragen?

Beitrag von ladiko »

grundlegend habe ich auch nichts dagegen. ich habe die bisher vom assi erstellten abfragen in der sql ansicht auch verstanden und kann auch mit einer sql-eingabe sehr gut leben. vielleicht könntest du mir dabei helfen zum gewünschten ergebnis zu kommen? :)
pmoegenb
********
Beiträge: 4330
Registriert: Di, 22.06.2004 12:02
Wohnort: 71134 Aidlingen
Kontaktdaten:

Re: Wie verknüpfe ich mehrere Abfragen?

Beitrag von pmoegenb »

Hier stehe eigentlich das Erforderliche; http://sql.1keydata.com/de/sql-union.php

Code: Alles auswählen

SELECT "Ort",  COUNT("ID")
FROM "Tiere"
WHERE MONTH( "Geburtsdatum" ) = 6                             
GROUP BY "Ort"                                       
ORDER BY "Ort" ASC
UNION
SELECT  "Ort",  COUNT("ID")                                                       
FROM  "Tiere"
WHERE MONTH( "Geburtsdatum" ) = 6 AND "Gattung" = 'Hund' 
GROUP BY  "Ort"
ORDER BY  "Ort" ASC
In diesem Beispiel werden Deine Abfragen durch die Klausel UNION miteinander verknüpft.
Gruß

Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Wie verknüpfe ich mehrere Abfragen?

Beitrag von eBayer »

Hallo, entschuldigt bitte, wenn ich mich als SQL-Dummy hier einmische......
Aber ich habe in meiner Anwendung mit dem Abfragedesigner eine Abfrage erstellt, die sich ihrerseits Daten aus Tabellen und einer weiteren Abfrage holt - und auch richtig funktioniert!
Gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Wie verknüpfe ich mehrere Abfragen?

Beitrag von Barlee »

Hallo ladiko,

das, was der Abfragedesigner bietet, geht natürlich auch in purem SQL.
In Deinem Fall bietet sich die Lösung mittels LEFT JOIN an. D.h. Du benutzt Deine drei erstellten (Unter)-Abfragen und verbindest die einzelnen Ergebnistabellen.
Vgl. auch viewtopic.php?f=8&t=25623&p=111165&hili ... in#p111165

Code: Alles auswählen

SELECT 
"Tab_A"."Ort", 
"Tab_A"."Tiere_Ges",
"Tab_B"."Anz_Hunde"
 FROM
(
SELECT                                       
"Ort",                                    
COUNT("ID")  AS "Tiere_Ges"   
FROM  "Tiere"   
WHERE MONTH( "Geburtsdatum" ) = 6                             
GROUP BY  "Ort"                                       
) "Tab_A" LEFT JOIN
(
SELECT                                                               
"Ort",                                                               
COUNT("ID")  AS "Anz_Hunde"                                                     
FROM  "Tiere"
WHERE MONTH( "Geburtsdatum" ) = 6 AND "Gattung" = 'Hund'
GROUP BY "Ort"
) "Tab_B" ON "Tab_A"."Ort" = "Tab_B"."Ort"
ORDER BY "Tab_A"."Ort" ASC
Mit den Mäusen/Katzen verfährst Du genauso.
SQL direkt ausführen muss aktiviert sein!

Gruß Barlee
Antworten