我根据某些条件从3个不同的表中提取计数,但要在时间间隔上对它们进行分组。(比如:1小时30分钟)
我需要以下输出:
Date Interval Success Un-Success Closed CLInotFound
2/20/2016 01:01 – 02:00 5 3 2 13
2/20/2016 02:01 – 03:00 14 9 23 5
2/20/2016 03:01 – 04:00 8 67 89 345
2/20/2016 04:01 – 05:00 2 23 92 12
2/20/2016 05:01 – 06:00 44 55 78 98
2/20/2016 06:01 – 07:00 12 87 56 445
我可以分别计算它们,但是当我试图组合时,结果就不同了。
查询1:成功和不成功:
SELECT CONVERT(VARCHAR(5), A.InsertionDate ,108) AS 'Interval',
COUNT(CASE WHEN A.call_result = 0 then 1 ELSE NULL END) AS 'Success',
COUNT(CASE WHEN A.call_result = 1 then 1 ELSE NULL END) AS 'Un-Success'
from dbo.AutoRectifier A
WHERE CONVERT(DateTime,A.InsertionDate,101) BETWEEN '2016-02-19 02:10:35.000' AND '2016-02-19 07:15:35.000'
GROUP BY A.InsertionDate;
关闭的查询2:
SELECT CONVERT(VARCHAR(5), C.DateAdded ,108) AS 'Interval',
COUNT(*) AS 'Closed' FROM dbo.ChangeTicketState C
WHERE C.SourceFlag = 'S-CNR' AND C.RET LIKE '%CLOSE%'
AND C.DateAdded BETWEEN '2016-02-19 02:10:35.000' AND '2016-02-19 07:15:35.000'
GROUP BY C.DateAdded;
找不到CLI的查询3:
SELECT CONVERT(VARCHAR(5), T.DateAdded ,108) AS 'Interval',
COUNT(*) 'CLI Not Found' FROM dbo.TICKET_INFO T
WHERE T.CONTACT_NUMBER = '' AND T.DateAdded BETWEEN '2016-02-19 02:10:35.000' AND '2016-02-19 07:15:35.000'
GROUP BY T.DateAdded;
发布于 2016-02-20 01:08:06
你的问题中有几个问题要解决。
UNION ALL
,但所有3个查询都必须有类似的列列表。所以,加上
0 as Closed, 0 as CLInotFound
若要选择Query1的列表,请添加
0 as Success, 0 as Un-Success, 0 as CLInotFound
若要选择Query2的列表并添加
0 as Success, 0 as Un-Success, 0 as Closed
到Query3,然后您可以编写
select * from Query1 union all select * from Query2 union all select * from Query3
SELECT A.InsertionDate AS Date, ...
Query2 -
SELECT C.DateAdded AS Date, ...
等。GROUP BY SUBSTRING(CONVERT(VARCHAR(20), Date ,120), 1, 13)
。所以,结果看起来就像
SELECT SUBSTRING(CONVERT(VARCHAR(20), Date ,120), 1, 13) as Interval, sum(Success) as sum(Un-Success) as, sum(Closed) as, sum(CLInotFound) as from ( select * from Query1 union all select * from Query2 union all select * from Query3 ) q GROUP BY SUBSTRING(CONVERT(VARCHAR(20), Date ,120), 1, 13)
其结果在日期和间隔字段的格式上略有不同,但表明了这一思想。如果您愿意,可以使用GROUP BY DATEPART(yy, Date), DATEPART(mm, Date), DATEPART(dd, Date), DATEPART(hh, Date)
代替GROUP BY SUBSTRING(CONVERT(VARCHAR(20), Date ,120), 1, 13)
和格式化。
此外,结果集不包含不存在于原始数据的间隔。您可以添加Query4,其中包含所需的所有间隔,以及在所有字段中的零来修复它。
https://stackoverflow.com/questions/35520378
复制相似问题