Zeilen in Spalten darstellen
-
Hallo zusammen,
ich glaub, ich stell mich gerade ein bißchen blöd an...
Vorhandene Tabelle
Id
Gruppe
Konto
WertTabellenbeispiel
ID, Gruppe, Konto, Wert 1, Bagger, 1400, 10000 2, Bagger, 1400, -500 3, Bagger, 1025, 75000 4, Bagger, 1020, 175000 5, Bagger, 1020, -75000
Das wären Beispiele für die vorkommenden Zeilen einer Gruppe. Bei den Konten können nur die Werte 1400, 1025 und 1020 vorkommen. Jedes Konto kann genau 2 Mal pro Gruppe vorkommen, einmal mit einem positiven Wert und einmal mit einem negativen Wert.
Ich möchte nun folgende Ausgabe erzeugen
Gruppe Konto 1400 Konto 1025 Konto 1020 Bagger 9500 75000 10000
Sprich ich möchte die Summen für die einzelnen Konten pro Gruppe nebeneinander ausgeben.
Ich bin mir nicht einmal mehr sicher, ob das überhaupt so geht, oder ob ich mir eine Hilfstabelle anlegen muss... Aber ich meine hier im Forum sogar schon mal eine Lösung dafür gesehen zu haben, aber ich finde es nicht mehr. Kann mir jemand einen Denkanstoß geben? (Die obige Tabellenstruktur ist fest vorgegeben und kann nicht verändert werden).
Ach so, falls es relevant ist, das ist für einen MS-SQL 2005.
Vielen Dank im voraus.
-
SELECT t1.gruppe, max( t1.wert ) - min( abs( t1.wert ) ) '1400', max( t2.wert ) - min( abs( t2.wert ) ) '1025', max( t3.wert ) - min( abs( t3.wert ) ) '1020' FROM your_table t1, your_table t2, your_table t3 WHERE t1.konto = 1400 AND t2.konto = 1025 AND t3.konto = 1020 AND t1.gruppe = t2.gruppe AND t2.gruppe = t3.gruppe GROUP BY t1.gruppe, t2.gruppe, t3.gruppe
-edit-
sollte funktionieren. Sollte allerdings zu einer Gruppe nicht jedes Konto zweimal vertreten sein, übernehme ich keine Garantie für die Richtigkeit der Daten
-
zwutz schrieb:
Sollte allerdings zu einer Gruppe nicht jedes Konto zweimal vertreten sein, übernehme ich keine Garantie für die Richtigkeit der Daten
Hallo zwutz,
danke für die Antwort, probiere ich gleich mal aus.
Alleridngs ist es absolut sicher, dass nicht zu jeder Gruppe, jedes Konto zwei mal vorhanden ist...
-
neuer Versuch:
SELECT t1.gruppe, t2.1400, t3.1025, t4.1020 FROM your_table t1 LEFT JOIN ( SELECT sum( wert ) '1400', gruppe FROM your_table WHERE konto = 1400 GROUP BY gruppe ) t2 ON t1.gruppe = t2.gruppe LEFT JOIN ( SELECT sum( wert ) '1025', gruppe FROM your_table WHERE konto = 1025 GROUP BY gruppe ) t3 ON t1.gruppe = t3.gruppe LEFT JOIN ( SELECT sum( wert ) '1020', gruppe FROM your_table WHERE konto = 1020 GROUP BY gruppe ) t4 ON t1.gruppe = t4.gruppe GROUP BY t1.gruppe
diesesmal sollte es funktionieren, konnte es allerdings nur unter MySQL testen... ob "left join" unter mssql genauso funktioniert, weiß ich grad nicht
-
Hallo zwutz,
nochmal Danke, leider sehe ich das jetzt erst... Da die Abfrage aber heute Morgen fertig sein musste, habe ich das gestern über eine temporäre Tabelle gelöst. Aber ich schau mir Deine Lösung nachher nochmal an und geb Dir eine Rückmeldung.
[EDIT] Ok, ich habs jetzt ausprobiert, aber leider scheint sich der MS-SQL-Server anders zu verhalten, da er mir die Felder aus t2, t3 und t4 anmeckert.
Aber wie gesagt, ich habs ja mittlerweile gelöst und auch noch was gelernt...