Поворот для DATEPART (нед., Дата) - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть такая таблица,

туЬаЫе

date       | value
2018.09.12 |  1
2018.09.11 |  2
2018.09.10 |  3

Мне нужен запрос для возврата суммы (значения) за последние шесть недель. Именно так.

week# | value
 37   |  6
 36   |  0
 35   |  0
 34   |  8
 33   |  9
 32   |  10
 31   |  11

У меня есть запрос на возврат суммы за каждую неделю.

SELECT Sum(Value) AS Sumvalue,  DATEPART(wk, date) AS [weekNo]
FROM mytable
WHERE Date BETWEEN DATEADD(DAY, -42, GETDATE()) AND  GETDATE() 
GROUP BY DATEPART(wk, date)

Но это не может обработать нулевые значения в течение недели.

Как можно написать сводный запрос для получения формата?

Моя попытка;

SELECT *
FROM (
           SELECT Value,  DATEPART(wk, date) AS [weekNo]
           FROM mytable
           WHERE Date BETWEEN DATEADD(DAY, -42, GETDATE()) AND  GETDATE() 
     ) As sourcetable
PIVOT
(
    Sum(Value) for DATEPART(wk, date) IN (SELECT date FROM mytable where date between 
                            DATEADD(DAY, -42, GETDATE()) and   GETDATE())
) AS pivotable

Я получаю синтаксическую ошибку рядом с ключевым словом. Как я могу поставить шесть недель в сводном состоянии

1 Ответ

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

Нашли частичное решение!

SELECT *
FROM (
           SELECT Value,  DATEPART(wk, date) AS [weekNo]
           FROM mytable
           WHERE Date BETWEEN DATEADD(DAY, -42, GETDATE()) AND  GETDATE() 
     ) As sourcetable
PIVOT
(
    Sum(Value) for [week] IN ([1], [2], [3], ... ,[54])
) AS pivotable

Это частичное решение, поскольку оно является жестким кодом оператора for и не может контролировать ненужные недели в запросе.

...