Tôi đang tìm cách xem có cách tiếp cận nào tốt hơn cho truy vấn bên dưới không. Những gì tôi đang cố gắng làm là tạo một báo cáo tóm tắt, biên soạn số liệu thống kê theo ngày.Truy vấn SQL - SUM (TRƯỜNG HỢP KHI x THÌ 1 ELSE 0) cho nhiều cột
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
Đây chỉ là một mẫu truy vấn (được sử dụng trong báo cáo) vì có một số cột khác và logic cho các thống kê khác phức tạp hơn. Có cách tiếp cận trang nhã hơn để nhận loại thông tin/viết loại báo cáo này không?
Đây có phải là trong một proc hoặc một cái nhìn, hay cái gì khác? Về cơ bản, bạn có thể giới thiệu các biến và chạy nhiều câu lệnh hay chỉ là một câu lệnh 'select' lớn? –
Đó là một proc sẽ được sử dụng cho một báo cáo SSRS, do đó, nó sẽ cần phải về cơ bản là một tuyên bố chọn như tôi cần phải trả lại một tập kết quả (phải không?) – MickJuice
Vâng, cuối cùng bạn sẽ có một 'lựa chọn 'lớn tại kết thúc, nhưng vì nó nằm trong proc, bạn sẽ có khả năng chia truy vấn của mình thành các phần nhỏ hơn, đơn giản hơn, gán các giá trị cho các biến khi bạn đi theo. Điều này có thể tạo ra sự khác biệt lớn về khả năng đọc. Ví dụ, thay vì 'union'ing hoặc nhóm ba truy vấn phụ này, bạn có thể có ba truy vấn độc lập nhỏ chạy trước, gán kết quả tóm tắt cho biến, sau đó chỉ cần chọn các biến đó cho truy vấn trả về của bạn. Có khả năng đọc và hiểu dễ dàng hơn nhiều và có thể hoạt động tốt hơn. –