PDA

View Full Version : SQL-Anforderung



Seiten : [1] 2

fpxx
06-09-12, 10:44
Hi @ all,

ich habe folgende Problemstellung.

In einer Datei befinden sich u.a. die Felder Artikel-Nr., Datum, Menge, Kennz. (Inhalte "A", "B", "C")

Ich benötige eine Aufstellung nach Artikel-Nr. in einem bestimmten Zeitraum, wobei das Ergebnis nach der Gesamtmenge absteigend sortiert werden soll und zusätzlich je Artikel die Mengen für die Kennzeichen A, B und C enthalten sein soll.

Mit der Anweisung
select artikelnr,sum(menge) SUMME_TOT from File where Datum between x and y group by artikelnr order by SUMME_TOT desc, artikelnr

erhalte ich die gewünschte Sortierung und die Gesamtmenge.

z.B.
Artikel-Nr. Menge-Ges
125 15000
102 12000
630 8500

Wie muss ich diese Anweisung ergänzen, damit ich je Artikel als zusätzliche Spalten die Angaben "davon A", "davon B", "davon C"
erhalte.

Vielen Dank für Eure Bemühungen.

Franz P.

malzusrex
06-09-12, 11:08
Das Kennzeichen in die Selectierung mit auf nehmen


select artikelnr,kennz , sum(menge) SUMME_TOT
from File
where Datum between x and y
group by artikelnr, kennz
order by SUMME_TOT desc, artikelnr

B.Hauser
06-09-12, 11:21
Versuch's mal so:


select artikelnr,sum(menge) SUMME_TOT,
Sum(Case When Kennz = 'A' Then Menge Else 0 End) "Davon A",
Sum(Case When Kennz = 'B' then Menge Else 0 End) "Davon B",
Sum(Case When Kennz = 'C' then Menge Else 0 End) "Davon C"
from File
where Datum between x and y
group by artikelnr
order by SUMME_TOT desc, artikelnr

Birgitta

fpxx
06-09-12, 11:56
Hab's so versucht und erfolgreich gewesen. :)

Danke Birgitta

fpxx
18-10-12, 13:10
Hallo Birgitta,
wenn ich bei diesem SQL (auf Summen-Ebene) auch noch Prozentsätze haben möchte, wie muss ich dann vorgehen?
Summe_TOT wäre die 100%-Basis und ich möchte zu den 3 durch Case bedingten Summen-Feldern (Davon A, Davon B und Davon C) die Prozentsätze bilden.
Vielen Dank im Voraus.
F.P.

Fuerchau
18-10-12, 13:15
Um den case-Ausdruck nicht komplett zu wiederholen musst du das in eine CTE oder derived Table packen:

select artikelnr , SUMME_TOT, "Davon A", ...
"Davon A" / SUMME_TOT * 100.00, ...
from (
select artikelnr,sum(menge) SUMME_TOT,
Sum(Case When Kennz = 'A' Then Menge Else 0 End) "Davon A",
Sum(Case When Kennz = 'B' then Menge Else 0 End) "Davon B",
Sum(Case When Kennz = 'C' then Menge Else 0 End) "Davon C"
from File
where Datum between x and y
group by artikelnr
)
order by SUMME_TOT desc, artikelnr

camouflage
18-10-12, 14:04
Versteh ich das richtig, dass er mit dieser Formel immer 100 % bekommt? ;-)

fpxx
18-10-12, 14:17
Hi Fuerchau,
danke für die prompte Antwort.
Ich bekomme allerdings die Fehlermeldung "Schlüsselwort BY nicht erwartet", wobei es sich dabei um das BY vom "Order by" handelt.

andreaspr@aon.at
18-10-12, 14:30
select artikelnr , SUMME_TOT, "Davon A", ...
"Davon A" / SUMME_TOT * 100.00, ...
from (
select artikelnr,sum(menge) SUMME_TOT,
Sum(Case When Kennz = 'A' Then Menge Else 0 End) "Davon A",
Sum(Case When Kennz = 'B' then Menge Else 0 End) "Davon B",
Sum(Case When Kennz = 'C' then Menge Else 0 End) "Davon C"
from File
where Datum between x and y
group by artikelnr
) Tab1
order by SUMME_TOT desc, artikelnr

fpxx
18-10-12, 14:34
Hi,
JA, jetzt funktioniert es bestens; vielen Dank.

Franz P.