Entwickler-Ecke
Datenbanken - [SQL] - GROUPierung für identische Datensätze
mexx - Di 16.10.07 09:53
Titel: [SQL] - GROUPierung für identische Datensätze
Ich habe eine Hauptgruppe, eine Untergruppe und eine ID. Beispiel.
H U ID
1 1 1000
1 2 1000
2 1 1001
1 1 1001
Mit welcher SQL würde ich nun nun herrausfinden, welche Hauptgruppe und Untergruppe für ID 1000 und 1001 identisch ist?
jasocul - Di 16.10.07 10:01
SQL-Anweisung
1: 2: 3:
| Select id from tabelle where h = u |
Das hat aber irgendwie nichts mit Sortierung zu tun. Passe bitte den Titel des Topics an.
mexx - Di 16.10.07 10:08
Ich glaube, Du hast mich nicht verstanden. Ich habe nur die beiden IDs und muss wissen, in welchen Gruppen sie sich befinden. Beide IDs befinden sich aber auch in unterschiedlichen Gruppen. Ich möchte nur die Gruppen haben, in denen sich ID 1000 und 1001 gemeinsam befinden.
alex517 - Di 16.10.07 10:26
Hi mexx,
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| select M.H, M.U from M where M.ID in (1000, 1001) group by M.H, M.U HAVING count(*) > 1 |
alex
mexx - Di 16.10.07 10:40
Klasse Alex, ich danke Dir. Mit Group by hatte ich es auch schon versucht, aber HAVING kannte ich nicht und so ging das immer schief. Thx!
jasocul - Di 16.10.07 10:44
Hat aber immer noch nix mit Sortierung zu tun.
Bitte passe den Titel an.
Sorry, dass ich Deine Frage falsch interpretiert habe.
mexx - Di 16.10.07 12:02
Sorry, Jungs, aber es passt dann doch noch nicht ganz.
H U ID
1 1 1000
1 2 1000
2 1 1001
1 1 1001
3 3 1002
Wenn ich nun die 3 IDs 1000,1001,1002 verwende und identische U zu finden, erhalte ich Ergebniss alle Untergruppen, wo ein count > 1 erfüllt wird. Aber ich möchte NUR die Gruppen haben, wo 1000, 1001 und 1002 gemeinsam drin stehen. Im aktuellen Beispiel, dürfte da jetzt keine Gruppe raus kommen, weil die 3 IDs nicht in allen Gruppen drin sind.
alex517 - Di 16.10.07 12:57
| Zitat: |
| Wenn ich nun die 3 IDs 1000,1001,1002 verwende und identische U zu finden, .. |
Dann muß count(*) = 3 sein stimmts?!?! :D
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| select M.HG, M.UG, count(*) from MEXX M where M.IDENT in (1000, 1001, 1002) group by M.HG, M.UG HAVING count(*) = 3 |
Diese Variante geht aber nur wenn die Kombination H,U,ID unique sind.
Wenn z.B sowas möglich ist
H U ID
1 1 1000
1 1 1000
1 1 1001
..
dann mußt du dir die auszuwertenden Menge als distinct(H,U,ID) erst zurechtlegen,
damit gleich Sätzen nur einmal gezählt werden.
In FB2.x geht das mit derived table.
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| select X.HG, X.UG, count(*) from (select distinct IDENT, HG, UG from MEXX where IDENT in (1000, 1001, 1002)) as X group by X.HG, X.UG HAVING count(*) = 3 |
An Stelle eine derived table könnte man auch eine View verwenden.
alex
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!