Zeilen in Spalten darstellen



  • Hallo zusammen,

    ich glaub, ich stell mich gerade ein bißchen blöd an...

    Vorhandene Tabelle
    Id
    Gruppe
    Konto
    Wert

    Tabellenbeispiel

    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... 😉


Anmelden zum Antworten