1.
free
14.03.2009 10:27:13 Peter de Maas Lesen/Editieren
Antworten Auswertungsabfrage Guten Tag, habe schon wieder ein SQL-Abfrageproblem an dem ich nicht weiter komme. Es geht um die Auswertung zweier Tabellen, Klienten und Journaleinträge. Klienten enthält u.a. eine ID je Datensatz. Diesem zugeordnet sind Datensätze der zweiten Tabelle, journaleinträge, die u.a. jeweils ein Datenfeld "Jid", "rootid" (referenz zur Haupttabelle), "DATUM", "ART",..., enthalten. Ein Klientdatensatz (id) sind also u.u. mehrere Datensätze zugeordnet, die jeweils verschiedene oder gleiche Werte unter ART enthalten. Auswertungen, die Journaldatensätze auswerfen, die innerhalb eines bestimmten Zeitraumes mindestens ein mal z.b. ART=1 enthalten, bekomme ich zustande (vermutlich komplizierter als nötig). Mein Problem aber sind Auswertungen, die Journaldatensätze eines Zeitraumes auswerfen, in dem eine bestimmte ART nicht vorkam. Sehe da wohl den Wald vor lauter Baümen nicht??? Für ein bischen Anschubhilfe wäre ich sehr dankbar. Peter 2.
free
14.03.2009 14:47:54 Jürgen Auer Lesen/Editieren
Antworten Re: Auswertungsabfrage Eigentlich ist das nur eine Where-Klausel:
Where Datum Between '2005-01-01' And 2007-12-31' And Art <> 1 3.
free
14.03.2009 16:01:16 Peter de Maas Lesen/Editieren
Antworten Auswertungsabfrage2 Ja, da bin ich mir nicht so genau sicher. Es geht darum diejenigen Klient-ids auszuwerfen, die in einem Zeitraum 2005-01-01' And 2007-12-31'niemals einen Eintrag mit der ART=1 hatten. Wichtig ist also, dass alle(!) in fragekommenden Einträge der zweiten tabelle nicht das Merkmal hatten. Wenn beispielsweise nur 1 DS der zweiten tabelle ART=1 hatte, dann würde die Abfrage ja doch diesen Klienten nicht auswerfen, weil die anderen DS vielleicht zutreffen. Mal ein Beispiel: in der Tabelle klienten hat eine Person die id 100. in der tabelle Journaleinträge gibt es folgende DS, alle mit datum im gesuchten Bereich: jid=345; rootid=100;art=0 jid=444; rootid=100;art=3 jid=555; rootid=100;art=0 Meine Abfrage sollte die Klientid 100 auswerfen, denn kein zugeordnerter DS hatte art=1. Wäre abe noch ein DS jid=446; rootid=100;art=1 im obigen Beispiel, dann sollte die Abfrage die Klientid 100 nicht zählen. Umgekehrt ist es m.E. kein Problem, wenn ich diejenigen rausfinden will, die mindestens 1 mal das merkmal hatten, mein Problem ist es, wenns nicht so war. Oder liege ich da völlig falsch? Gruß Peter 4.
free
14.03.2009 21:56:59 Jürgen Auer Lesen/Editieren
Antworten Re: Auswertungsabfrage > Es geht darum diejenigen Klient-ids auszuwerfen, die in einem Zeitraum 2005-01-01' And 2007-12-31'niemals einen Eintrag mit der ART=1 hatten.
Das läßt sich über einen Left Join erledigen.
Als Unterabfrage die Zeilen, die diese Eigenschaft haben:
Select B.Id From Tabelle As B Where B.Datum Between '2005-01-01' And '2007-12-31' And B.ART = 1 Group By B.Id
und das als Unterabfrage per Left Join verknüpft:
Select A.Id From Tabelle As A Left Join ( obiges ) As C On A.Id = C.Id Where C.Id Is Null
Dann führt ein passender Eintrag dazu, daß diese Id nicht mehr auftaucht. 5.
free
15.03.2009 02:15:38 Peter de Maas Lesen/Editieren
Antworten Auswertungsabfrage3 Vielen Dank, sieht nach dem aus, was ich suche! Peter