我正在查看是否有更好的方法來查詢下面。我想要做的是創建一個總結報告,按日期編制統計信息。對於多列SQL查詢 - SUM(CASE WHEN x THEN 1 ELSE 0)
SELECT CAST(Detail.ReceiptDate AS DATE) AS 'DATE'
, SUM(CASE WHEN Detail.Type = 'TotalMailed' THEN 1 ELSE 0 END) AS 'TOTALMAILED'
, SUM(CASE WHEN Detail.Type = 'TotalReturnMail' THEN 1 ELSE 0 END) AS 'TOTALUNDELINOTICESRECEIVED'
, SUM(CASE WHEN Detail.Type = 'TraceReturnedMail' THEN 1 ELSE 0 END) AS 'TRACEUNDELNOTICESRECEIVED'
FROM
(
select SentDate AS 'ReceiptDate', 'TotalMailed' AS 'Type'
from MailDataExtract
where sentdate is not null
UNION ALL
select MDE.ReturnMailDate AS 'ReceiptDate', 'TotalReturnMail' AS 'Type'
from MailDataExtract MDE
where MDE.ReturnMailDate is not null
UNION ALL
select MDE.ReturnMailDate AS 'ReceiptDate', 'TraceReturnedMail' AS 'Type'
from MailDataExtract MDE
inner join DTSharedData.dbo.ScanData SD ON SD.ScanDataID = MDE.ReturnScanDataID
where MDE.ReturnMailDate is not null AND SD.ReturnMailTypeID = 1
) AS Detail
GROUP BY CAST(Detail.ReceiptDate AS DATE)
ORDER BY 1
這僅僅是該查詢(其在一報告中所使用)的樣品作爲有一些其它列的和用於其它統計信息的邏輯是方式更加複雜。有沒有更優雅的方法來獲取這類信息/撰寫這種報告?
這是在一個進程或視圖,還是其他什麼東西?基本上,你可以引入變量並運行多個語句,還是隻是一個大的'select'語句? –
這是一個將被用於SSRS報告的過程,所以它將基本上是一個select語句,因爲我需要返回一個結果集(對吧?) – MickJuice
是的,你最終將有一個大的'select'結束,但由於它處於proc中,因此您可以將查詢分解爲更小,更簡單的塊,並根據變量將值分配給變量。這可以在可讀性方面產生很大的不同。例如,可以將三個小型獨立查詢事先運行並將彙總結果指定給變量,而不是將這三個子查詢進行聯合或分組,而不是將這些變量分配給您的返回查詢。可能更容易閱讀和理解,並可能更好地表現。 –