Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Datenbanken ::  Zeilen in Spalten darstellen     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Unregistrierter





Beitrag Unregistrierter 15:34:44 02.03.2010   Titel:   Zeilen in Spalten darstellen            Zitieren

Hallo zusammen,

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

Vorhandene Tabelle
Id
Gruppe
Konto
Wert

Tabellenbeispiel
Code:
ID, Gruppe, Konto, Wert
1, Bagger, 1400, 10000
2, Bagger, 1400, -500
3, Bagger, 1025, 75000
4, Bagger, 1020, 175000
5, Bagger, 1020, -75000
Code:
ID, Gruppe, Konto, Wert
1, Bagger, 1400, 10000
2, Bagger, 1400, -500
3, Bagger, 1025, 75000
4, Bagger, 1020, 175000
5, Bagger, 1020, -75000
Code:
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

Code:
Gruppe    Konto 1400    Konto 1025    Konto 1020
Bagger    9500        75000        10000
Code:
Gruppe Konto 1400 Konto 1025 Konto 1020
Bagger 9500 75000 10000
Code:
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.
zwutz
Mitglied

Benutzerprofil
Anmeldungsdatum: 22.11.2007
Beiträge: 3411
Beitrag zwutz Mitglied 16:30:55 02.03.2010   Titel:              Zitieren

Code:
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
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
Code:
1
2
3
4
5
6
7
8
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
Code:
1
2
3
4
5
6
7
8
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 :P

_________________
Raise your glass if you are wrong


Zuletzt bearbeitet von zwutz am 16:35:27 02.03.2010, insgesamt 2-mal bearbeitet
Unregistrierter





Beitrag Unregistrierter 16:41:02 02.03.2010   Titel:              Zitieren

zwutz schrieb:
Sollte allerdings zu einer Gruppe nicht jedes Konto zweimal vertreten sein, übernehme ich keine Garantie für die Richtigkeit der Daten :P


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...
zwutz
Mitglied

Benutzerprofil
Anmeldungsdatum: 22.11.2007
Beiträge: 3411
Beitrag zwutz Mitglied 18:54:57 02.03.2010   Titel:              Zitieren

neuer Versuch:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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

_________________
Raise your glass if you are wrong
Unregistrierter





Beitrag Unregistrierter 11:36:18 03.03.2010   Titel:              Zitieren

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... ;)


Zuletzt bearbeitet von Unregistrierter am 12:34:04 03.03.2010, insgesamt 1-mal bearbeitet
C/C++ Forum :: Datenbanken ::  Zeilen in Spalten darstellen   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.