我來完善這個查詢,工作得非常好。提高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