ich will nen datensatz filtern, komme komme aber irgendwie nicht zu dem ergebnis was ich haben will. also, ich hab ne tabelle von der nur 2 spalten interresieren : (zB) "nID" "sID" 0 y1 0 y2 0 x1 0 x2 0 x3 10001 y2 10001 x3 10002 y1
jetzt brauch ich ne abfrage wo mir alle "sID" gelistet werden die "nID=0" sind und zusätzlich ein feld angelegt wird was signalisiert ob von einer bestimmten "nID" ebenfalls ein datensatz vorhanden ist. also soll bei der abfrage nach zB nID=10001 folgendes rauskommen : "nID" "sID" "flag" 0 y1 0 0 y2 1 0 x1 0 0 x2 0 0 x3 1
wie lös ich das ? geht das überhaupt mit nem JOIN ?
Hmm wie wäre es mit zwei Abfragen... Einmal alle wo nID 0 ist und einmal wo nID ungleich null ist...
bei der ungleich 0 gruppieren (und ggf. summieren) nach sid und dann an die erste dranbauen... -- ...fleißig wie zwei WeißbroteDieser Post wurde am 29.07.2010 um 15:58 Uhr von Windalf editiert.
mh, versteh ich jetzt nicht so ganz wie du das meinst. ich hab jetzt erst mal folgende abfrage SELECT csID, nID FROM table1 WHERE nID in (10001, 0) ORDER BY csID, nID desc; das ergebnis ist dann "sID" "nID" y1 0 y2 10001 y2 0 <-- der soll eben nicht erscheinen x1 0 x2 0 x3 10001 x3 0 <-- der auch nicht
Ich habe aktuell nur Access auf dem Rechner aber auf die schnelle so...
Abfrage 1
C++:
SELECT Tabelle1.nID, Tabelle1.sID FROM Tabelle1 WHERE (((Tabelle1.nID)=0));
Abfrage 2
C++:
SELECT Tabelle1.sID, Count(Tabelle1.nID) AS Anzahl FROM Tabelle1 GROUP BY Tabelle1.sID, Tabelle1.nID HAVING (((Tabelle1.nID)<>0));
Abfrage 3
C++:
SELECT Abfrage1.sID, Abfrage2.Anzahl FROM Abfrage1 LEFT JOIN Abfrage2 ON Abfrage1.sID = Abfrage2.sID;
Das flag müsstest du dann noch aus Anzahl bilden. Die Frage ist ob das überhaupt nötig ist. Überall wo nix (oder ne Null) steht gibts den Datensatz halt nicht. Kann man auch direkt damit weiterarbeiten... -- ...fleißig wie zwei Weißbrote
besten dank! hast mich in die richtige richtung gebracht, das flag ist in der tat überflüssig. an GROUP BY hab ich überhaupt nicht gedacht! hab es jetzt :
Code:
SELECT csID, COUNT(nID) AS flag FROM table1 WHERE nID IN (10002, 0) GROUP BY csID ORDER BY csID;