Hallo Leute, ich bin totaler Anfänger. Bitte seid nachsichtig.
Ich habe eine Abfrage mit einem Case, wo ich zusätzlich aber eine Countfunktion drin habe. Am Ende wollte ich die Sache gruppieren, aber wie mache ich das mit dem case? Geht das überhaupt?
Hier der Code:
select
left(PD.pak_lieferscheinnr,1) as LS,
case
when KM."ku5-herkunft" like 'AM%' then 'Amazon'
when KM.ku1_kundennummer like 'PA%' then 'ShopApotheke'
when KM.ku3_zahlungskondit like 'L6' or KM.ku1_kundennummer like 'EB%' then 'Ebay'
else 'Selly'
end as Shop,
KM.ku1_land as Land,
PD.pak_zusammenstelldat as Datum,
count(PD.pak_paketbarcode) As Anz_PaketNr
from paketdaten PD
inner join Kundenmaske KM on PD."pak_rückliefer-kunde" = KM.ku1_kundennummer
where PD.pak_zusammenstelldat between '2025-07-15' and '2025-07-31' and
PD.pak_lieferscheinnr like 'P%' and
PD.pak_versandart in ('b','s','c','5')
group by
left(PD.pak_lieferscheinnr,1),
KM.ku1_land,
PD.pak_zusammenstelldat
???
Die 3 Fragezeichen stehen für die Case-Funktion. Hat jemand einen Tipp für mich?
Die gesamte Case Anweisung 1:1 nach Group by kopieren.
Und warum Hochkomma statt [ ] bei den Feldnamen?
Ansonsten schaut das eher wild aus.
Hallo,
das ist die eine Möglichkeit, CASE wiederholen (müßtest Du dann auch bei einem ORDER BY etwa).
Oder Du verwendest eine CTE (Common Table Expression):
WITH qry AS
(
SELECT LEFT(PD.pak_lieferscheinnr, 1) AS LS
,CASE
WHEN KM."ku5-herkunft" LIKE 'AM%' THEN 'Amazon'
WHEN KM.ku1_kundennummer LIKE 'PA%' THEN 'ShopApotheke'
WHEN KM.ku3_zahlungskondit LIKE 'L6'
OR KM.ku1_kundennummer LIKE 'EB%' THEN 'Ebay'
ELSE 'Selly'
END AS Shop
,KM.ku1_land AS Land
,PD.pak_zusammenstelldat AS Datum
,COUNT(PD.pak_paketbarcode) AS Anz_PaketNr
FROM paketdaten PD
INNER JOIN Kundenmaske KM ON PD."pak_rückliefer-kunde" = KM.ku1_kundennummer
)
SELECT Q.LS
,Q.Shop
,Q.Land
,Q.Datum
,Q.Anz_PaketNr
FROM qry AS Q
GROUP BY Q.LS
,Q.Shop
,Q.Land
,Q.Datum
,Q.Anz_PaketNr
Alternativ auch einfach eine Unterabfrage, wenn Dein DB-Server mit CTEs nicht zurechtkommt.
Gruß
Christian
Zitat von: K a t j a am Juli 18, 2025, 10:10:48Ich habe eine Abfrage mit einem Case,
Verwendest du Access, oder ein anderes DBMS, das diese Abfrage ausführen soll?
Access bzw. dessen JET/ACE-Datenbankengine unterstützt CASE nicht. Dort musst du den Ausdruck mit Funktionen wie Iif, Switch, oder Choose aufbauen.
Zitat von: K a t j a am Juli 18, 2025, 10:10:48wo ich zusätzlich aber eine Countfunktion drin habe. Am Ende wollte ich die Sache gruppieren, aber wie mache ich das mit dem case? Geht das überhaupt?
Egal mit welchen Mitteln (s.o.) du deine Abfrage gestaltest, die verwendete Definition für CASE o.ä. muss im GROUP BY identisch wiederholt werden, aber ggfls. ohne einen Alias.
Hallo,
erstmal vielen Dank für die Tipps. Ich probiere das alles am Montag aus. Jetzt erstmal schönes Wochenende! :)