T-SQL Gruppieren-Summieren
Hallo.
Ich habe eine SQL-Abfrage, mit der Ich mir mehrere Werte aus zwei Tabellen hole.
Mein Makro sieht so aus:
Die Abfrage funktioniert, ich bekomme nun eine Auflistung aller Datensätze samt den Werten.
Nun habe ich 2 Fragen bzw. Probleme.
1.) Ich muss nun div. Felder aufsummieren.
Ich brauche also nun die Summe aller "Ara1" Datensätze, die Summe aller "Ara2"-Datensätze usw.
würde ich Prinzipiell mit "SUM" hinbekommen, was jedoch zu Problem 2 führt:
2.) Ich brauche diese Summierung gruppiert.
In den Einzelnen DS ist das Feld "AraGruppe" befüllt.
Dies kann verscheidene Werte enthalten, z.B. AT1, AT2, AT3, ...
Wie muss ich mein Statement umbauen?
Zur Veranschaulichung, wir haben eine Ergebnissmenge die foglend aussieht:
Gerechnet werden soll immer:
Menge * ARA1
Menge * ARA2
Menge * ARA3
usw.
Jedoch brauche ich diese Rechnung pro AraGruppe.
Wie wäre dies zu realisieren?
Lieben Dank!
Ich habe eine SQL-Abfrage, mit der Ich mir mehrere Werte aus zwei Tabellen hole.
Mein Makro sieht so aus:
select
p.Artikelnummer as Artikel,
p.Menge as Menge,
a._ARA1010 as Ara1,
a._ARA1020 as Ara2,
a._ARA1031 as Ara3,
a._ARA1032 as Ara4,
a._ARA1041 as Ara5,
a._ARA1042 as Ara6,
a._ARA1043 as Ara7,
a._ARA1044 as Ara8,
a._ARA1045 as Ara9,
a._ARA1046 as Ara10,
a._ARA1047 as Ara11,
a._ARA2010 as Ara12,
a._ARA2020 as Ara13,
a._ARA2031 as Ara14,
a._ARA2032 as Ara15,
a._ARA2041 as Ara16,
a._ARA2042 as Ara17,
a._ARA2050 as Ara18,
a._ARA2060 as Ara19,
a._ARA2070 as Ara20,
a._ARA2080 as Ara21,
a._ARA2090 as Ara22,
a._ARA2100 as Ara23,
a._ARA2110 as Ara24,
a._ARAGRUPPE as AraGruppe,
(:Tarif_1_01_0) as 'Tarif 1',
(:Tarif_1_02_0) as 'Tarif 2',
(:Tarif_1_03_1) as 'Tarif 3',
(:Tarif_1_03_2) as 'Tarif 4',
(:Tarif_1_04_1) as 'Tarif 5',
(:Tarif_1_04_2) as 'Tarif 6',
(:Tarif_1_04_3) as 'Tarif 7',
(:Tarif_1_04_4) as 'Tarif 8',
(:Tarif_1_04_5) as 'Tarif 9',
(:Tarif_1_04_6) as 'Tarif 10',
(:Tarif_1_04_7) as 'Tarif 11',
(:Tarif_2_01_0) as 'Tarif 12',
(:Tarif_2_02_0) as 'Tarif 13',
(:Tarif_2_03_1) as 'Tarif 14',
(:Tarif_2_03_2) as 'Tarif 15',
(:Tarif_2_04_1) as 'Tarif 16',
(:Tarif_2_04_2) as 'Tarif 17',
(:Tarif_2_05_0) as 'Tarif 18',
(:Tarif_2_06_0) as 'Tarif 19',
(:Tarif_2_07_0) as 'Tarif 20',
(:Tarif_2_08_0) as 'Tarif 21',
(:Tarif_2_09_0) as 'Tarif 22',
(:Tarif_2_10_0) as 'Tarif 23',
(:Tarif_2_11_0) as 'Tarif 24'
from belegp
as p
inner join ART
as a
on a.Artikelnummer = p.Artikelnummer
where p.Belegtyp = 'R' and Datum >= :Von_Datum and Datum <= :Bis_Datum
Die Abfrage funktioniert, ich bekomme nun eine Auflistung aller Datensätze samt den Werten.
Nun habe ich 2 Fragen bzw. Probleme.
1.) Ich muss nun div. Felder aufsummieren.
Ich brauche also nun die Summe aller "Ara1" Datensätze, die Summe aller "Ara2"-Datensätze usw.
würde ich Prinzipiell mit "SUM" hinbekommen, was jedoch zu Problem 2 führt:
2.) Ich brauche diese Summierung gruppiert.
In den Einzelnen DS ist das Feld "AraGruppe" befüllt.
Dies kann verscheidene Werte enthalten, z.B. AT1, AT2, AT3, ...
Wie muss ich mein Statement umbauen?
Zur Veranschaulichung, wir haben eine Ergebnissmenge die foglend aussieht:
~Artikel | ~Menge | ~AraGruppe | ~Ara1 | ~Ara2 | ~Ara3 | ~Ara4 | ~Ara5 |
pp1000 | 600 | AT 20a | 0,015 | 0,106 | 0,005 | ||
pp1003 | 60 | AT 20a | 0,015 | 0,106 | 0,008 | ||
pp1006 | 60 | AT 20a | 0,014 | 0,095 | 0,011 | ||
pp1050 | 600 | AT 20a | 0,015 | 0,106 | 0,005 | ||
pp1050 | 1200 | AT 20a | 0,015 | 0,106 | 0,005 | ||
pp1200 | 1200 | AT 17 | 0,015 | 0,106 | 0,005 | ||
pp1200 | 1200 | AT 17 | 0,015 | 0,106 | 0,005 | ||
pp1200 | 1200 | AT 17 | 0,015 | 0,106 | 0,005 | ||
pp2000 | 300 | AT 19 | 0,015 | 0,106 | 0,008 | ||
pp2000 | 600 | AT 19 | 0,015 | 0,106 | 0,008 | ||
pp2001 | 120 | AT 19 | 0,015 | 0,106 | 0,005 | ||
pp2002 | 1200 | AT 19 | 0,016 | 0,106 | 0,008 |
Menge * ARA1
Menge * ARA2
Menge * ARA3
usw.
Jedoch brauche ich diese Rechnung pro AraGruppe.
Wie wäre dies zu realisieren?
Lieben Dank!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 376670
Url: https://administrator.de/contentid/376670
Ausgedruckt am: 26.11.2024 um 22:11 Uhr
5 Kommentare
Neuester Kommentar
Hi,
ich glaube, Du hast einen Denkfehler in Deiner eigenen Anforderung.
Wenn Du nach "AraGruppe" die "Menge" summieren willst - wo willst Du das dann hinschreiben? In jede einzelne Zeile eines Artikels aus dieser Gruppe? Weil die anderen Felder unterscheiden sich doch auch, z.B. "Ara1" für "pp1006" und "pp1050", welche beide in Gruppe "AT 20a" sind. Ergo musst Du eh neu selektieren und kannst nur die Summe von "Menge" in Abhängigkeit von nur "AraGruppe" darstellen. Oder?
E.
ich glaube, Du hast einen Denkfehler in Deiner eigenen Anforderung.
Wenn Du nach "AraGruppe" die "Menge" summieren willst - wo willst Du das dann hinschreiben? In jede einzelne Zeile eines Artikels aus dieser Gruppe? Weil die anderen Felder unterscheiden sich doch auch, z.B. "Ara1" für "pp1006" und "pp1050", welche beide in Gruppe "AT 20a" sind. Ergo musst Du eh neu selektieren und kannst nur die Summe von "Menge" in Abhängigkeit von nur "AraGruppe" darstellen. Oder?
E.
Moin,
Mache doch zwei Statements und verkette die mit einem Inner join.
Das erste Statement beinhaltet deine relevanten Felder aus einzelnen Datensätzen.
Im zweiten Statement machst du deine relevanten zu aggregierenden Felder und schlüssel ist dann (vermutlich) die Spalte "AraGruppe" (!?).
Du müsstest dir nur die richtigen Felder dann noch auswählen und einsetzen
Gruß
em-pie
Mache doch zwei Statements und verkette die mit einem Inner join.
Das erste Statement beinhaltet deine relevanten Felder aus einzelnen Datensätzen.
Im zweiten Statement machst du deine relevanten zu aggregierenden Felder und schlüssel ist dann (vermutlich) die Spalte "AraGruppe" (!?).
SELECT
a.AraGruppe
, a.field1_1
, a.field1_2
, a.field1_3
, a.field1_4 * b.Sum2_1
, a.field1_4 * b.Sum2_1
FROM
Table1 as a
INNER JOIN
(SELECT AraGruppe, SUM(field2_1) as Sum2_1, MAX(field2_2) as Max2_2, MIN(field2_3) FROM Table2 GROUP BY AraGruppe) as b on a.AraGruppe = b.AraGruppe
WHERE
Hase=Igel
Du müsstest dir nur die richtigen Felder dann noch auswählen und einsetzen
Gruß
em-pie
Dein SQL scheint massiv gegen die Normalisierung zu verstoßen. Ich würde sagen durch die redundanten Spalten machst du dir dein Leben selber schwer. Mit sum() kannst du keine Spalten aufaddieren, nur Zeilen. Daher wirst du mit a._ARA1010 + a._ARA1020... arbeiten oder deine Daten normalisieren müssen.
Das mit dem gruppieren "verschlimmert" dann ggf. die Probleme, daher wäre ich für eine Änderung der Tabelle und die Auslagerung der Werte Ara1 bis N in eine eigene Tabelle.
Das mit dem gruppieren "verschlimmert" dann ggf. die Probleme, daher wäre ich für eine Änderung der Tabelle und die Auslagerung der Werte Ara1 bis N in eine eigene Tabelle.