Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

wie gruppiere ich einen "case"

Begonnen von K a t j a, Juli 18, 2025, 10:10:48

⏪ vorheriges - nächstes ⏩

K a t j a

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?

markusxy

#1
Die gesamte Case Anweisung 1:1 nach Group by kopieren.

Und warum Hochkomma statt [ ] bei den Feldnamen?

Ansonsten schaut das eher wild aus.

Bitsqueezer

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

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

K a t j a

Hallo,
erstmal vielen Dank für die Tipps. Ich probiere das alles am Montag aus. Jetzt erstmal schönes Wochenende!  :)