【发布时间】:2020-06-04 23:46:45
【问题描述】:
我试图按年份整齐地分离数据,我有以下查询来完成此操作,但是,日期列 (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
【问题讨论】:
-
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(25 多年前),不鼓励使用它
标签: sql sql-server