WinFuture-Forum.de: [sql] Gruppierung/summierung - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

[sql] Gruppierung/summierung


#1 Mitglied ist offline   george_costanza 

  • Gruppe: aktive Mitglieder
  • Beiträge: 234
  • Beigetreten: 10. März 06
  • Reputation: 0

geschrieben 17. März 2009 - 14:22

tach!

so, jetzt nervts mich! :gähn:

also frage ich ^^

DBS: MS SQL 2000

folgendes ich habe eine tabelle, die sieht so aus:

KundenNr | KundenName | ProduktNr | ProduktName | Menge | Gesamtsumme
12345 | Dingenskirchen GmbH | 1234 | Toll1 | 10 | EUR 5.440,-
12345 | Dingenskirchen GmbH | 1234 | Toll1 | 5 | EUR 2.720,-
(...)

so ich hätte nun gerne das ergebnis:
KundenNr | KundenName | ProduktNr | ProduktName | Menge | Gesamtsumme
12345 | Dingenskirchen GmbH | 1234 | Toll1 | 15 | EUR 8.160,-

wie muss mein SQL-statement aussehen?

vielen dank vorab!


hinweis: ich weiss, dass der aufbau nicht der dritten normalform entspricht! :)

Dieser Beitrag wurde von george_costanza bearbeitet: 17. März 2009 - 14:24

0

Anzeige



#2 Mitglied ist offline   sefrado 

  • Gruppe: Mitglieder
  • Beiträge: 4
  • Beigetreten: 17. März 09
  • Reputation: 0

geschrieben 17. März 2009 - 14:55

Was willst du genau tun? Sollen alle mit dem gleichen Empfänger zusammen gefasst werden oder alle mit den gleichen Produkten oder was genau?

Und warum machst du nicht ein Update anstelle eines Inserts auf die Datensätze mit gleichen Artikelnummern und Empfängern?

Dieser Beitrag wurde von sefrado bearbeitet: 17. März 2009 - 15:06

0

#3 Mitglied ist offline   george_costanza 

  • Gruppe: aktive Mitglieder
  • Beiträge: 234
  • Beigetreten: 10. März 06
  • Reputation: 0

geschrieben 17. März 2009 - 16:03

also,

das sind die daten
KundenNr | KundenName | ProduktNr | ProduktName | Menge | Gesamtsumme
12345 | Dingenskirchen GmbH | 1234 | Toll1 | 10 | EUR 5.440,-
12345 | Dingenskirchen GmbH | 1234 | Toll1 | 5 | EUR 2.720,-
12346 | Hallo AG | 1234 | Toll1 | 20 | EUR 10.880,-
12346 | Hallo AG | 1234 | Toll1 | 30 | EUR 16.320,-
(...)

so soll es aussehen
KundenNr | KundenName | ProduktNr | ProduktName | Menge | Gesamtsumme
12345 | Dingenskirchen GmbH | 1234 | Toll1 | 15 | EUR 8.160,-
12346 | Hallo AG | 1234 | Toll1 | 50 | EUR 27.200,-


bitte nicht nach dem wie und warum fragen - warum mach ich nicht dieses jenes und welches?
ich habe mir etwas dabei gedacht!
sorry, soll nicht arrogant klingen, aber das ist das weshalb ich foren manchmal hasse... ^^

beispiel:
frage: "ich kriege den CPU-lüfter von meinem AMD schlag-mich-tot nicht entfernt - was kann ich tun?"
antwort: "AMD is eh shice - kauf dir nen intel!"

jo, so ist deine antwort auch! sorry! :gähn:

so, ok - machen wirs so:
die DB die ich abfrage ist schreibgeschützt - ich kann nur SELECT-querys drauf abfeuern! :)

Dieser Beitrag wurde von george_costanza bearbeitet: 17. März 2009 - 16:04

0

#4 Mitglied ist offline   mush 

  • Gruppe: aktive Mitglieder
  • Beiträge: 895
  • Beigetreten: 29. Mai 07
  • Reputation: 7

geschrieben 17. März 2009 - 16:09

Du hast die Frage nicht verstanden. :)

Was willst du denn letzten Endes? Sollen alle Einträge mit einer bestimmten Kundennummer selektiert werden?

Wer keine benötigten Informationen preisgibt, bekommt keine Hilfe. So einfach ist das.
insane in the membrane
0

#5 Mitglied ist offline   george_costanza 

  • Gruppe: aktive Mitglieder
  • Beiträge: 234
  • Beigetreten: 10. März 06
  • Reputation: 0

geschrieben 17. März 2009 - 16:20

ahso!

sorry!

hm... ich dachte die beispiele wären eindeutig...

ich wüsste gerade nicht wie ich das in worte kleiden soll...
bitte einmal das letzte beispiel nochmal angucken! :)

*edit*
ich versuchs mal:
- also eh menge soll summiert werden
- und gesamtsumme soll summiert werden
- jedoch für jede KD-Nr und jede Art-Nr separat

o_0 ist das nun besser?! o_0

Dieser Beitrag wurde von george_costanza bearbeitet: 17. März 2009 - 16:22

0

#6 Mitglied ist offline   sefrado 

  • Gruppe: Mitglieder
  • Beiträge: 4
  • Beigetreten: 17. März 09
  • Reputation: 0

geschrieben 17. März 2009 - 16:22

SELECT KundenNr, KundenName, ProduktNr, Produktname, SUM(Menge), SUM(Gesamtsumme)
FROM `tabelle`
GROUP BY KundenNr,ArtikelNr

Dieser Beitrag wurde von sefrado bearbeitet: 17. März 2009 - 16:30

0

#7 Mitglied ist offline   george_costanza 

  • Gruppe: aktive Mitglieder
  • Beiträge: 234
  • Beigetreten: 10. März 06
  • Reputation: 0

geschrieben 17. März 2009 - 16:43

jaaaaa!

so hab ich mir dat auch immer vorgestellt - nur dann kommt:

Zitat

Server: Msg 8120, Level 16, State 1, Line 1
Column '#tmmmmp.KundenNr' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Server: Msg 8120, Level 16, State 1, Line 1
Column '#tmmmmp.KundenName ' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Server: Msg 8120, Level 16, State 1, Line 1
Column '#tmmmmp.ProduktNr' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Server: Msg 8120, Level 16, State 1, Line 1
Column '#tmmmmp.ProduktName' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

0

#8 Mitglied ist offline   sefrado 

  • Gruppe: Mitglieder
  • Beiträge: 4
  • Beigetreten: 17. März 09
  • Reputation: 0

geschrieben 17. März 2009 - 16:59

Ach ja, du musst die jeweiligen Feldnamen noch in eine Aggregatfunktion packen.

SELECT count(KundenNr), count(KundenName), count(ProduktNr), count(Produktname), SUM(Menge), SUM(Gesamtsumme)
FROM `tabelle`
GROUP BY KundenNr,ArtikelNr

Die geben dann natürlich nur die Anzahl der betroffenen Datensätze zurück
0

#9 Mitglied ist offline   george_costanza 

  • Gruppe: aktive Mitglieder
  • Beiträge: 234
  • Beigetreten: 10. März 06
  • Reputation: 0

geschrieben 17. März 2009 - 17:08

danke!

fast richtig! :<

sieht dann so aus:
KundenNr | KundenName | ProduktNr | ProduktName | Menge | Gesamtsumme
2 | 2 | 2 | 2 | 40 | .000000
12 | 12 | 12 | 12 | 12 | 1506.120000
1 | 1 | 1 | 0 | 1 | 135.000000
1 | 1 | 1 | 0 | 1 | 162.400000
(...)

sprich: die kundenr, kundenname, produktnr und produktname werden nur noch anzahlmässig dargestellt... ich brauche jedoch die werte!

Dieser Beitrag wurde von george_costanza bearbeitet: 17. März 2009 - 17:08

0

#10 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Geisenhausen / München

geschrieben 17. März 2009 - 18:16

Wenn du nicht nur nach Kunden sondern auch nach Produkte aufgelistet haben willst, dann musst du auch nach diesen gruppieren:

SELECT KundenNr, KundenName, ProduktNr, ProduktName, SUM(Menge), SUM(Gesamtsumme)
FROM `tabelle`
GROUP BY KundenNr, KundenName, ProduktNr, ProduktName


Merke für GROUP BY:
  • Entweder die abgefragten Werte stehen auch in der GROUP BY-Klausel
  • oder auf sie wird eine Zusammenfassungsfunktionen angewandt (z.B. SUM(), MAX(), COUNT(), ...)


Falls eine Spalte einfach so abgefragt wird, dann "weiß" ja die Datenbank nicht, was Sie machen soll wenn z.B. zwei verschiedene Kundennamen bei einer Kundennummer stehen.

Viele Grüße,
Stefan
0

#11 Mitglied ist offline   george_costanza 

  • Gruppe: aktive Mitglieder
  • Beiträge: 234
  • Beigetreten: 10. März 06
  • Reputation: 0

geschrieben 17. März 2009 - 18:25

hi!

jo, das liefert mir nur leider nicht das ergebnis wie ich es in meinen beispielen erklärt habe! :rolleyes:

muss doch gehen... kein bock das zu fuss in excel zu machen... o_0

wenn ich das so mache wie du (Diewie) sagst dann kumuliert SQL nur die zeilen wo menge und gesamtsumme identisch sind, also:

ausgangssituation:
KundenNr | KundenName | ProduktNr | ProduktName | Menge | Gesamtsumme
12345 | Dingenskirchen GmbH | 1234 | Toll1 | 10 | EUR 5.440,-
12345 | Dingenskirchen GmbH | 1234 | Toll1 | 5 | EUR 2.720,-
12346 | Hallo AG | 1234 | Toll1 | 20 | EUR 10.880,-
12346 | Hallo AG | 1234 | Toll1 | 30 | EUR 16.320,-
12346 | Hallo AG | 1234 | Toll1 | 30 | EUR 16.320,-
(...)

ergebnis wäre (leider):
KundenNr | KundenName | ProduktNr | ProduktName | Menge | Gesamtsumme
12345 | Dingenskirchen GmbH | 1234 | Toll1 | 10 | EUR 5.440,-
12345 | Dingenskirchen GmbH | 1234 | Toll1 | 5 | EUR 2.720,-
12346 | Hallo AG | 1234 | Toll1 | 20 | EUR 10.880,-
12346 | Hallo AG | 1234 | Toll1 | 60 | EUR 32.640,-
(...)

und nicht wie gewünscht::
KundenNr | KundenName | ProduktNr | ProduktName | Menge | Gesamtsumme
12345 | Dingenskirchen GmbH | 1234 | Toll1 | 15 | EUR 8.160,-
12346 | Hallo AG | 1234 | Toll1 | 80 | EUR 43.520,-


zu hilf! <_<
0

#12 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Geisenhausen / München

geschrieben 17. März 2009 - 18:38

Dann hast du leider irgendwo einen grundlegendes Problem. Ich habe hier keinen MS SQL 2000er zum testen. Mir ist auch nichts bekannt, dass man für die Version 2000 etwas anders machen müsste, da hier der ISO-Standard eingehalten wird.

Viele Grüße,
Stefan
0

#13 Mitglied ist offline   george_costanza 

  • Gruppe: aktive Mitglieder
  • Beiträge: 234
  • Beigetreten: 10. März 06
  • Reputation: 0

geschrieben 17. März 2009 - 18:55

ma eben kurz in access2007 reingeprügelt...

ergebnis:

Zitat

KundenNr KundenName ProduktNr ProduktName Expr1004 Expr1005
12345 Dingenskirchen GmbH 1234 Toll1 5 2720
12345 Dingenskirchen GmbH 1234 Toll1 10 5440
12346 Hallo AG 1234 Toll1 20 10880
12346 Hallo AG 1234 Toll1 60 32640

unfassbar... das kann doch nicht wahr sein...

so hier ma mit screenies - zum besseren angucken:
tabelle:
Eingefügtes Bild

abfrage-ergebnis:
Eingefügtes Bild

Dieser Beitrag wurde von george_costanza bearbeitet: 17. März 2009 - 18:59

0

#14 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Geisenhausen / München

geschrieben 17. März 2009 - 19:06

Ich habe auch kurz eine Tabelle und eine Abfrage erstellt, bei mir geht es jedoch.

Viele Grüße,
Stefan

Angehängte Datei(en)


0

#15 Mitglied ist offline   george_costanza 

  • Gruppe: aktive Mitglieder
  • Beiträge: 234
  • Beigetreten: 10. März 06
  • Reputation: 0

geschrieben 17. März 2009 - 19:13

diewie! eh STEFAN!!!!

das ises!!!!!!!

alter schwede!

jetzt klärt sich einiges in meinem hirn auf! :rolleyes:

hammer!

so, der unterschied war ganz klar in der "GROUP BY"-klausel:

ich habe bei der gruppierung stets "menge" und "gesamtsumme" dringehabt...

au backe...

VIELEN DANK!!!!!!

Dieser Beitrag wurde von george_costanza bearbeitet: 17. März 2009 - 19:16

0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0