Ich bin auf der Suche, ob es einen besseren Ansatz für die Abfrage unten gibt. Ich versuche, einen zusammenfassenden Bericht zu erstellen, der Statistiken nach Datum zusammenstellt.SQL-Abfrage - SUMME (CASE WHEN x THEN 1 ELSE 0) für mehrere Spalten
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
Dies ist nur ein Beispiel für die Abfrage ist (die in einem Bericht verwendet wird) als eine Reihe von anderen Spalten und die Logik für die anderen Statistiken gibt es sind viel komplizierter. Gibt es einen eleganteren Ansatz, um diese Art von Informationen zu erhalten?
Ist das in einem proc oder Blick, oder etwas anderes? Grundsätzlich können Sie Variablen einführen und mehrere Anweisungen ausführen, oder ist es nur eine große 'select' Anweisung? –
Es ist ein Proc, der für einen SSRS-Bericht verwendet wird, also muss es im Wesentlichen eine Select-Anweisung sein, da ich eine Ergebnismenge zurückgeben muss (richtig?) – MickJuice
Ja, Sie haben schließlich eine große Auswahl an der end, aber da es sich um einen proc handelt, haben Sie die Möglichkeit, die Abfrage in kleinere, einfachere Blöcke aufzuteilen und den Variablen im Verlaufe der Zeit Werte zuzuweisen. Dies kann einen großen Unterschied in der Lesbarkeit machen. Anstatt beispielsweise diese drei Unterabfragen zusammenzufassen oder zu gruppieren, können Sie im Voraus drei kleine eigenständige Abfragen ausführen, die den Variablen zusammengefasste Ergebnisse zuweisen, und dann einfach diese Variablen für Ihre Rückfrage auswählen. Potenziell viel einfacher zu lesen und zu verstehen und möglicherweise auch besser. –