Ich habe eine Tabelle mit Dienstleistungen. Ich muss zwei SELECT-Abfragen zusammenführen. Beide haben unterschiedliche where-Klauseln. Zum Beispiel
SELECT
U_REGN as 'Region',
COUNT(callID) as 'OpenServices',
SUM(CASE WHEN descrption LIKE '%DFC%' THEN 1 ELSE 0 END) 'DFC'
FROM OSCL
WHERE
([status] = - 3)
GROUP BY
U_REGN
ORDER BY
'OpenServices' desc
Das gibt mir Ergebnis
Region | OpenServices | DFC
Karaci | 14 | 4
Lahore | 13 | 3
Islamabad | 10 | 4
Ich habe noch eine Frage
SELECT
U_REGN as 'Region',
COUNT(callID) as 'ClosedYesterday'
FROM OSCL
WHERE
DATEDIFF(day, closeDate, GETDATE()) = 1
GROUP BY
U_REGN
ORDER BY
'ClosedYesterday' desc
Es gibt mir Ergebnis
Region | ClosedServices
Karachi | 8
Lahore | 7
Islamabad | 4
Ich muss beide Ergebnisse zusammenführen und ClosedServices neben der DFC-Spalte anzeigen.
sql-server
TheSarfaraz
quelle
quelle
Antworten:
Behandeln Sie die Ergebnismengen Ihrer beiden aktuellen Abfragen als Tabellen und fügen Sie sie hinzu:
Nicht das schönste Stück SQL, das ich je geschrieben habe, aber hoffentlich werden Sie sehen, wie es funktioniert und wie Sie es warten.
Ich vermute, dass eine Abfrage mit besserer Leistung eine einzelne
SELECT
von OSCL ist, die nach U_REGN gruppiert ist und bei der jeder Ihrer drei Zähler separateSUM(CASE ...)
Anweisungen enthält, die denen entsprechen, die Sie derzeit für DFC ausführen . Dies ist höchstens ein einzelner Tabellenscan, abhängig von Ihren Indizes und Ihrem Schema.quelle
Aufbauend auf Michaels Vorschlag:
quelle