SQL - каждый столбец показывает результаты из определенного диапазона? - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь создать матрицу продаж внутри SAP.

Отчет по SQL, который я хочу запустить, очень прост. Это включает в себя следующее:

SELECT 
    T1.ItemCode, SUM(T1.Quantity)
FROM
    OINV T0
INNER JOIN
    INV1 T1 ON T0.DocEntry = T1.DocEntry
WHERE
    ItemCode IS NOT NULL
    AND CardCode = 'C001500'
GROUP BY 
    T1.ItemCode
ORDER BY 
    T1.ItemCode

Я хочу, чтобы поле SUM(t1.quantity) разбивалось на недели, но не могу понять, как его разбить.

Я хочу Current Week, который будет daterange между Getdate() и Getdate()+7, Затем Week1, который будет Getdate()+8 To GetDate () + 14` и т. Д. Это будет продолжаться в течение 12 недель.

Спасибо за любую помощь!

Andy

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Я написал этот кусок кода сейчас, однако SUM T1.Quantity не суммируется. Я вижу, как AHV16 продает 1 товар на неделе 5, затем другой экземпляр AHV16 продает один товар на неделе 2. и AHV 16 показывает NULL для недели 1 - 12 и показывает 1 для итога за 12 недель (Swhich должно быть неделя 2 + неделя 5).

SELECT T1.ItemCode
, '12 Week Total' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-84,Getdate()) AND T0.DocDate<=DateAdd(D,0,Getdate())))
, 'Current Week' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-7,Getdate()) AND T0.DocDate<=DateAdd(D,0,Getdate())))
, 'Week 2' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-14,Getdate()) AND T0.DocDate<=DateAdd(D,-8,Getdate())))
, 'Week 3' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-21,Getdate()) AND T0.DocDate<=DateAdd(D,-15,Getdate())))
, 'Week 4' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-28,Getdate()) AND T0.DocDate<=DateAdd(D,-22,Getdate())))
, 'Week 5' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-35,Getdate()) AND T0.DocDate<=DateAdd(D,-29,Getdate())))
, 'Week 6' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-42,Getdate()) AND T0.DocDate<=DateAdd(D,-36,Getdate())))
, 'Week 7' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-49,Getdate()) AND T0.DocDate<=DateAdd(D,-43,Getdate())))
, 'Week 8' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-56,Getdate()) AND T0.DocDate<=DateAdd(D,-50,Getdate())))
, 'Week 9' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-63,Getdate()) AND T0.DocDate<=DateAdd(D,-57,Getdate())))
, 'Week 10' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-70,Getdate()) AND T0.DocDate<=DateAdd(D,-64,Getdate())))
, 'Week 11' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-77,Getdate()) AND T0.DocDate<=DateAdd(D,-71,Getdate())))
, 'Week 12' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-84,Getdate()) AND T0.DocDate<=DateAdd(D,-78,Getdate())))


    FROM OINV T0 INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry

WHERE ItemCode IS NOT NULL and CardCode = 'C001500'
GROUP BY T1.ItemCode, T0.Docdate

Order By T1.ItemCode
0 голосов
/ 05 сентября 2018

В HAHA SQL есть функция WEEK() (которую я предполагаю, что вы используете с SAP). Добавление дополнительного GROUP BY к этому вычисленному значению должно помочь.

https://help.sap.com/viewer/4fe29514fd584807ac9f2a04f6754767/2.0.00/en-US/20f5758b7519101498b28e41757fe664.html

Если вы используете mySAP, то это SQL Server, а DATEPART - то, что вам нужно.

https://docs.microsoft.com/en-us/sql/t-sql/functions/datepart-transact-sql?view=sql-server-2017

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...