【发布时间】:2019-08-07 22:13:21
【问题描述】:
尝试提取动态列表(并推送到可视化应用程序),该列表显示每月创建了多少支持票证以及关闭了多少票。需要 3 列 - 创建的案例数、关闭的案例数和 YYYYMM。创建/关闭日期都是日期时间字段。不能在同一行同时创建和关闭。
SELECT
COUNT (t1.id) AS Tickets_Created
,CAST(DATEPART(yy,t1.CreatedAt) AS VARCHAR) +' '+ (SUBSTRING(CONVERT(NVARCHAR(6),t1.CreatedAt,112),5,2)) AS YYYYMM
FROM [Ticket] AS T1
WHERE T1.Spam=0
GROUP BY CAST(DATEPART(yy,t1.CreatedAt) AS VARCHAR) +' '+ (SUBSTRING(CONVERT(NVARCHAR(6),t1.CreatedAt,112),5,2))
--ORDER BY YYYYMM
UNION
SELECT
COUNT (t.id) AS Tickets_Resolved
,CAST(DATEPART(yy,S.ResolvedAt) AS VARCHAR) +' '+ (SUBSTRING(CONVERT(NVARCHAR(6),S.ResolvedAt,112),5,2)) AS YYYYMM
FROM [Ticket] T
LEFT JOIN FS.TicketStatus S ON S.TicketNK=T.id
WHERE T.Spam=0 AND YEAR(s.ResolvedAt) > '2016'
GROUP BY CAST(DATEPART(yy,S.ResolvedAt) AS VARCHAR) +' '+ (SUBSTRING(CONVERT(NVARCHAR(6),S.ResolvedAt,112),5,2))
预期结果:
YYYYMM Created Closed
2017 11 50 30
2017 12 45 23
2018 01 90 56
实际结果(关闭日期显示在下一行):
Tickets_Created YYYYMM
1 2017 11
2 2017 11
16 2017 12
25 2017 12
34 2018 01
54 2018 01
【问题讨论】:
-
欢迎来到 SO。请注明您使用的数据库。
-
对于一个更有可能得到好答案的好问题,将表结构包括为
CREATE TABLE语句,示例数据为INSERT INTO语句,使用该示例数据的所需结果,您的当前尝试(您已经包含该尝试)并标记您正在使用的 DBMS 和版本。您可以随时edit 一个问题,通过添加此类信息来提高其质量。 -
提示:在 SQL 中将日期转换为字符串/文本/
nvarchar是一种代码味道,因为通常您不需要这样做。与使用字符串转换相比,有很多更好的方法可以将日期分组为月份和年份。
标签: sql