이 쿼리를 향상시켜야합니다.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
글쎄, 어떻게 데이터를 한 달씩 그룹화 할 수 있는지 모르겠습니다. 이것이 내가 원하는 개선점입니다. – TioDavid
당신이 가지고있는 테이블 구조를 설명하지 않기 때문에 모호합니다. 그 달을 선택할 칼럼을 모를 때 월별로 그룹화하는 방법을 어떻게 알 수 있습니까? (예 : DateMsgIncome, DateMsgSent는 DateTime 열 둘 다 같습니다.) – DrCopyPaste