Как выбрать столбцы в цикле с условиями - PullRequest
0 голосов
/ 26 июня 2019

У меня есть этот запрос. DDIFF - это разница двух столбцов даты в таблице:

SELECT 
    DDIFF,
    SUM(CASE WHEN Franchise = 'Franchise' THEN 1 ELSE 0 END) AS [Franchise Count],
    SUM(CASE WHEN Franchise = 'Own' THEN 1 ELSE 0 END) AS [Own Count]
FROM
    dbo.joined
GROUP BY
    DDIFF, Franchise
ORDER BY
    DDIFF

А это фрагмент вывода:

DDIFF   Franchise Count Own Count
----------------------------------
NULL    0               1
-31     0               3
-28     0               13
-20     2               0
-16     1               0
-13     0               2
...

Я получаю данные о продажах для франшиз или «собственных» магазинов.

Но я хочу разделить эти числа на месяцы, поэтому мне нужно сделать какой-то цикл, чтобы получить эти два столбца для каждого месяца года (то есть столбцы 12x2)

Чтобы иметь что-то вроде этого:

DDIFF   [2019.01 Franchise] [2019.01 Own] [2019.02 Franchise] [2019.02 Own] ...
-------------------------------------------------------------------------
NULL    0                   1             0                   1
-31     0                   0             2                   1
-28     0                   10            0                   3
-20     1                   0             1                   0
-16     1                   0             0                   0
-13     0                   1             0                   1
...

Полагаю, мне нужно создать какой-то цикл и добавить условие AND dateColumn = year.month в CASE WHEN ..., чтобы построить фактический столбец для этого месяца, или даже встроенный цикл, охватывающий несколько лет.

Существует ли синтаксис, который позволяет мне создавать такие столбцы?

1 Ответ

2 голосов
/ 27 июня 2019

Я думаю, вы хотите что-то вроде этого:

SELECT 
    DDIFF,
    SUM(CASE WHEN Franchise = 'Franchise' and month(datefiled) = 1 THEN 1 ELSE 0 END) AS [2019.1 Franchise Count],
    SUM(CASE WHEN Franchise = 'Own' and month(datefiled) = 1 THEN 1 ELSE 0 END) AS [2019.1 Own Count],

    SUM(CASE WHEN Franchise = 'Franchise' and month(datefiled) = 2 THEN 1 ELSE 0 END) AS [2019.2 Franchise Count],
    SUM(CASE WHEN Franchise = 'Own' and month(datefiled) = 2 THEN 1 ELSE 0 END) AS [2019.2 Own Count],

    SUM(CASE WHEN Franchise = 'Franchise' and month(datefiled) = 3 THEN 1 ELSE 0 END) AS [2019.3 Franchise Count],
    SUM(CASE WHEN Franchise = 'Own' and month(datefiled) = 3 THEN 1 ELSE 0 END) AS [2019.3 Own Count],

-- etc

FROM  dbo.joined
GROUP BY DDIFF
ORDER BY DDIFF
...