[英]SQL Server : each month for the rows and the years for the columns
我試圖按年份巧妙地分離數據,我有以下查詢來完成此操作,但是,日期列 (YYYYMM) 顯示每年的每個月。 因此,除了其各自年份的行之外,大多數行的每個年度列都是零。
SELECT
DATEFROMPARTS(YEAR(l.Date), MONTH(l.Date), 01) AS YYYYMM,
SUM(CASE WHEN l.State ='UT' AND YEAR(l.Date) = '2018' THEN 1 ELSE 0 END) AS 'UT - 2018',
SUM(CASE WHEN l.State ='UT' AND YEAR(l.Date) = '2019' THEN 1 ELSE 0 END) AS 'UT - 2019',
SUM(CASE WHEN l.State ='UT' AND YEAR(l.Date) = '2020' THEN 1 ELSE 0 END) AS 'UT - 2020',
SUM(CASE WHEN l.State ='AZ' AND YEAR(l.Date) = '2018' THEN 1 ELSE 0 END) AS 'AZ - 2018',
SUM(CASE WHEN l.State ='AZ' AND YEAR(l.Date) = '2019' THEN 1 ELSE 0 END) AS 'AZ - 2019',
SUM(CASE WHEN l.State ='AZ' AND YEAR(l.Date) = '2020' THEN 1 ELSE 0 END) AS 'AZ - 2020',
SUM(CASE WHEN l.State ='NV' AND YEAR(l.Date) = '2020' THEN 1 ELSE 0 END) AS 'NV - 2020'
FROM
dbo.list AS l,
dbo.StatusLogs AS sl
WHERE
sl.ListId = l.Id
GROUP BY
DATEFROMPARTS(YEAR(l.Date), MONTH(l.Date), 01)
ORDER BY
DATEFROMPARTS(YEAR(l.Date), MONTH(l.Date), 01)
我想要做的是只有 12 行(每個月 1 行)。 像這樣:
MM UT - 2018 .... NV - 2020
Jan 10 5
Feb 5 8
...
Dec 6 7
學習使用正確的、明確的、標准的、可讀的JOIN
語法。
然后,解決方法是更改GROUP BY
和SELECT
:
SELECT MONTH(l.Date) AS month,
SUM(CASE WHEN l.State ='UT' AND YEAR(l.Date) = 2018 THEN 1 ELSE 0 END) AS [UT - 2018],
SUM(CASE WHEN l.State ='UT' AND YEAR(l.Date) = 2019 THEN 1 ELSE 0 END) AS [UT - 2019],
SUM(CASE WHEN l.State ='UT' AND YEAR(l.Date) = 2020 THEN 1 ELSE 0 END) AS [UT - 2020],
SUM(CASE WHEN l.State ='AZ' AND YEAR(l.Date) = 2018 THEN 1 ELSE 0 END) AS [AZ - 2018],
SUM(CASE WHEN l.State ='AZ' AND YEAR(l.Date) = 2019 THEN 1 ELSE 0 END) AS [AZ - 2019],
SUM(CASE WHEN l.State ='AZ' AND YEAR(l.Date) = 2020 THEN 1 ELSE 0 END) AS [AZ - 2020],
SUM(CASE WHEN l.State ='NV' AND YEAR(l.Date) = 2020 THEN 1 ELSE 0 END) AS [NV - 2020]
FROM dbo.list l JOIN
dbo.StatusLogs sl
ON sl.ListId = l.Id
GROUP BY MONTH(l.Date)
ORDER BY MONTH(l.Date);
我還刪除了一堆單引號。 單引號應僅用於日期和字符串常量。 YEAR()
返回一個數字,所以比較應該是一個數字。 列別名確實不需要轉義,但是如果您有不符合要求的名稱,請使用方括號。 單引號將列名與值混淆。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.