![]() |
Gruppieren über Union
Hallo,
ich habe zwei Select-Statements (mysql), die ich mit 'Union' zusammenfasse. Jedes einzelne Statement ist nach der selben Spalte gruppiert.
SQL-Code:
Wie schaffe ich es aber die Gruppierung für die ganze Abfrage festzulegen? Denn ich bekomme einen Datensatz doppelt! Beispiel:
Select *
From 'Table1' Join ... Where ... Group by 'ID' union Select * From 'Table2' Join ... Where ... Group by 'ID'
SQL-Code:
Eigentlich möchte ich den Datensatz mit der ID 56 nur einmal. Für die Differenz muss ich dann das Ergebnis 8 bekommen...
ID Menge Differenz
-------------------- 51 1 1 52 1 1 53 1 1 54 2 2 55 3 3 56 10 10 // Bis hier ist das erste Select-Statement 56 -2 -2 // Diese Zeile liefert mir das zweite Weiß jemand Rat? Danke! |
Re: Gruppieren über Union
Den Sinn der Gruppierung kapiere ich nicht (bzw. der ganzen Abfrage :gruebel: )....
Code:
[b]SELECT[/b] ID
,Menge ,Differenz [b]FROM[/b] ([b]SELECT[/b] ID ,Menge ,Menge [b]As[/b] Differenz [b]FROM[/b] Table1 [b]UNION ALL[/b] [b]SELECT[/b] t2.ID ,t2.Menge ,abs(t1.Menge - t2.Menge) [b]As[/b] Differenz [b]FROM[/b] Table1 t1 ,Table2 t2 [b]WHERE[/b] t1.ID(+) = t2.ID [color=#000088]-- kA ob mySQL das schluckt (ich hasse die JOIN Schreibweise :roll: )[/color] [color=#000088]-- -> wäre wohl ein LEFT OUTER[/color] ) |
Re: Gruppieren über Union
Hallo,
Zitat:
Was ich möchte ist die beiden Gruppierungen zu einer zusammenzufassen:
SQL-Code:
Als Ausgabe dann:
SELECT PK.*, sum(PK.differenz)
FROM Partie P INNER JOIN ... INNER JOIN ... INNER JOIN ... where Differenz>0 Group By PK.Unterpartie_ID union SELECT PK.*, sum(differenz) FROM Position Pos INNER JOIN ... INNER JOIN ... WHERE A.Auftrag_ID<>6 Group By PK.Unterpartie_ID
SQL-Code:
Mit dem 'Union All' bekomme ich alle Datensätze der Selects. Das bringt daher keine Veränderung...
ID Menge sum(PK.Differenz)
-------------------- 51 1 1 52 1 1 53 1 1 54 2 2 55 1 1 56 10 10 // Diese Zeilen sollen Zusammengefasst werden, so dass dort steht: 56 -2 -2 // 56 (beliebig) 8 |
Re: Gruppieren über Union
Hallo Barnti,
du kannst über Union nicht gruppieren. Da bleibt nur 2 Abfragen zu erstellen und diese dann manuell zusammenzufügen. |
Re: Gruppieren über Union
Zitat:
Danke MrSpock! |
Re: Gruppieren über Union
Zitat:
SQL-Code:
Es ist zu beachten: in der [Feldliste] dürfen nur Felder auftauchen, die bei GROUP BY aufgeführt
SELECT gruppierungsfeld, SUM(summenfeld) FROM
( SELECT [feldliste] FROM ... GROUP BY ... UNION ALL SELECT [feldliste] FROM ... GROUP BY ... ) GROUP BY gruppierungsfeld werden (In deinem Fall Unterpartie_ID) und ausserdem dürfen Aggregatfunktionen (SUM, MIN, MAX, COUNT) verwendet werden. SELECT * FROM Tabelle GROUP BY Feld1 ist falsch ! |
Re: Gruppieren über Union
@shmia: mysql! ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz