Neu SQL Abfrage für verkaufte Artikel nach Plattformen

lantelme

Neues Mitglied
3. September 2019
3
2
Hallo euch allen,

ich will eine Abfrage erstellen die in den Zeilen unsere SKU und in den Spalten die Anzahl der Verkäufe dieser Artikel nach Plattform sowie in verschiedenen Zeitenräumen anzeigt.
Meine Abfrage sieht so aus (als Beispiel nur den Part für Amazon.de):
USE eazybusiness
SELECT tbestellpos.cArtNr AS SKU

,case when tBestellung.dErstellt > DATEADD(DAY, -7, getdate()) and MIN(tBestellung.nPlatform) = 51 then convert(int,sum(tbestellpos.nAnzahl)) else 0 end AS AmazonDeWoche
,case when tBestellung.dErstellt > DATEADD(DAY, -30, getdate()) and MIN(tBestellung.nPlatform) = 51 then convert(int,sum(tbestellpos.nAnzahl)) else 0 end AS AmazonDe30
,case when tBestellung.dErstellt > DATEADD(DAY, -90, getdate()) and MIN(tBestellung.nPlatform) = 51 then convert(int,sum(tbestellpos.nAnzahl)) else 0 end AS AmazonDe90
,case when tBestellung.dErstellt > DATEADD(DAY, -365, getdate()) and MIN(tBestellung.nPlatform) = 51 then convert(int,sum(tbestellpos.nAnzahl)) else 0 end AS AmazonDe365
,case when MIN(tBestellung.nPlatform) = 51 then convert(int,sum(tbestellpos.nAnzahl)) else 0 end AS AmazonDeGes

FROM tBestellung
JOIN tbestellpos
ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
WHERE ISNULL(tbestellung.cType,'') = 'B'
AND ISNULL(tbestellpos.cArtNr,' ') <> ' '
GROUP BY cArtNr
ORDER BY cArtNr asc
Jede Gesamtabfrage, die kein Datum abfrägt, funktioniert einwandfrei. Nun zu meinem Problem. Das Management Studio gibt mir den Fehler "Die tBestellung.dErstellt-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist." aus. Zu Beginn hatte ich das selbe Problem mit der Spalte nPlatform, doch dieses konnte ich dank MIN() umgehen. Eben jenes kann ich aber nicht bei einem Datum verwenden.
Wenn ich die Spalte dErstellt in die GROUP BY Klausel einbinde, bekomme ich die selbe SKU mehrmals angezeigt (für jede verkaufte Position ein mal), was nicht Sinn und Zweck der Sache ist.

Mir gehen langsam die Ideen aus. Bin für jede Hilfe dankbar!
MfG
 

exxxtensa

Neues Mitglied
21. Oktober 2019
1
1
Sag ihm, er soll das nächste mal gleich mich fragen ;)
@DieMods: Wir kennen uns privat.

Also, hier bidde. ABER: ist leider ungetestet. Sitze hier am Mac und habe gerade kein Management Studio, kann das erst morgen mit dir verifizieren/korrigieren
SQL:
 --Variablen für den Zeitvergleich, spart code
DECLARE @dat7 datetime = dateadd(day, -7, getdate());
DECLARE @dat30 datetime = dateadd(day, -30, getdate());
DECLARE @dat90 datetime = dateadd(day, -90, getdate());
DECLARE @dat365 datetime = dateadd(day, -365, getdate());

declare @amazonDE smallint = 51;
--hier noch die anderen shops einfügen

USE eazybusiness;

SELECT cArtNr AS SKU

--AmazonDE
,sum(case when dErstellt > @dat7 and nPlatform = @amazonDE then convert(int, nAnzahl) else 0 end) AS Amazon7
,sum(case when dErstellt > @dat30 and nPlatform = @amazonDE then convert(int, nAnzahl) else 0 end) AS AmazonDE30
,sum(case when dErstellt > @dat90 and nPlatform = @amazonDE then convert(int, nAnzahl) else 0 end) AS AmazonDE90
,sum(case when dErstellt > @dat365 and nPlatform = @amazonDE then convert(int, nAnzahl) else 0 end) AS AmazonDE365
,sum(case when nPlatform = @amazonDE then convert(int, nAnzahl) else 0 end) AS AmazonDEGes

--und so weiter mit amazonUS, amazonIT, etc..

--Beispiel für Amazon alle Länder Gesamt:
,sum(case when nPlatform between 50 and 60) then convert(int, nAnzahl) else 0 int) as AmazonGes
--oder besser
,sum(case when nPlatform between @amazonDE and @amazonUS) then convert(int, nAnzahl) else 0 int) as AmazonGes2 --variablen noch deklarieren

FROM tBestellung
LEFT JOIN tbestellpos
ON kBestellung = tBestellung_kBestellung
WHERE ISNULL(cType,'') = 'B'
AND TRIM(ISNULL(cArtNr,'') <> ''
GROUP BY cArtNr
ORDER BY SKU asc
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: lantelme

Über uns

  • In unserem moderierten JTL-Forum könnt Ihr Euch themenbezogen mit der JTL-Community rund um die Produkte von JTL, passende Erweiterungen und den E-Commerce im Allgemeinen austauschen, Tipps und Tricks teilen sowie Verbesserungswünsche und Fehler diskutieren.

    Unsere Forumsnutzer helfen sich untereinander auch gerne weiter, wenn Sie mal nicht weiterkommen oder einen Ratschlag benötigen.

Schnell-Navigation

Benutzer Menü