Saya punya satu tabel layanan. Saya perlu menggabungkan dua pertanyaan SELECT. Keduanya memiliki klausa tempat yang berbeda. Sebagai contoh
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
Ini memberi saya hasil
Region | OpenServices | DFC
Karaci | 14 | 4
Lahore | 13 | 3
Islamabad | 10 | 4
Saya punya pertanyaan lain
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
Ini memberi saya hasil
Region | ClosedServices
Karachi | 8
Lahore | 7
Islamabad | 4
Saya perlu menggabungkan kedua hasil, dan menampilkan ClosedServices di sebelah kolom DFC.
sql-server
TheSarfaraz
sumber
sumber
Jawaban:
Perlakukan dua hasil kueri saat ini sebagai tabel dan gabungkanlah:
Bukan bit SQL tercantik yang pernah saya tulis, tetapi mudah-mudahan Anda akan melihat cara kerjanya dan memahami cara mempertahankannya.
Saya menduga permintaan yang berkinerja lebih baik adalah tunggal
SELECT
dari OSCL, dikelompokkan oleh U_REGN, dengan masing-masing dari tiga penghitung Anda sebagaiSUM(CASE ...)
pernyataan terpisah yang serupa dengan apa yang Anda lakukan saat ini untuk DFC. Ini akan menjadi pemindaian tabel tunggal, paling banyak, tergantung Anda indeks & skema Anda.sumber
Membangun saran Michael:
sumber