我来完善这个查询,工作得非常好。提高SQL Server查询
DECLARE @timTimeout int,
@iniDate varchar(20),
@endDate varchar(20)
SET @iniDate = '2014-07-20 00:00:00'
SET @endDate = '2014-11-24 23:59:59'
SET @timTimeout = 4000
SET ANSI_WARNINGS OFF
SELECT
'Approved (0200)' = ISNULL(SUM(CASE CodMsgIncome WHEN '0200' THEN 1 END), 0),
'Approved Off (0220)' = ISNULL(SUM(CASE CodMsgIncome WHEN '0220' THEN 1 END), 0),
'Cancel (0400)' = ISNULL(SUM(CASE CodMsgIncome WHEN '0400' THEN 1 END), 0),
'Regret (0420)' = ISNULL(SUM(CASE CodMsgIncome WHEN '0420' THEN 1 END), 0),
'TOTAL' = COUNT(*),
'Time-outs' = ISNULL(SUM(CASE WHEN DATEDIFF(ms, DateMsgIncome, DateMsgSent) > @timTimeout THEN 1 END), 0),
'Disponibility (%)' = (1 - CAST(ISNULL(SUM(CASE WHEN DATEDIFF(ms, DateMsgIncome, DateMsgSent) > @timTimeout THEN 1 END), 0) as money)/COUNT(*)) * 100
FROM Message (NOLOCK)
WHERE DateMsgIncome BETWEEN @iniDate AND @endDate
AND CodMsgIncome IN ('0200', '0220', '0400', '0420', '0800', '0900', '9080', '9085')
AND DescMsgIncome <> '0220'
现在,我必须准备一份总计数据按月组织的报告。
输出disered似乎是这样的:
Approved (0200) | Approved Off (0220) | Cancel | Total | Time-outs | Disponibility (%)
July | 35 15 12 62 0 100.00
.
.
.
编辑: 这是我的查询只有一个表。
Table Message:
DateMsgIncome date,
DateMsgSent date,
CodMsgIncome varchar(4),
DescMsgIncome varchar(4),
CodMsgAnswer int.
任何建议是值得欢迎的。 在此先感谢。
你没有得到任何错误,是吗?您想以何种方式改进该查询?速度,美观,还是什么? – DrCopyPaste 2014-11-24 15:51:23
嗯,我不知道如何按月分组数据。这是我想要的改进。 – TioDavid 2014-11-24 15:52:27
它含糊不清,因为你没有描述你有什么表格结构。我们应该如何知道如何按月分组这个月份,当时我们甚至不知道该月份选择哪一列? (DateMsgIncome,DateMsgSent例如似乎是两个日期时间列) – DrCopyPaste 2014-11-24 15:58:06