以下のクエリは機能しますが、私が読んだことによると、結果を取得する最も効率的な方法ではありませんOR
。またはJOIN
を使用する必要があると思いますが、それを達成する方法がわかりません。誰かが私の結果を得るために「適切な」ものを説明できますか?UNION
INTERSECT
WITH CTE1 AS (SELECT SC, SN, COUNT(AL) AS UNEXCUSED
FROM ATT
WHERE AL = 'U'
GROUP BY SC, SN),
CTE2 AS (SELECT SC, SN, COUNT(AL) AS SUSPENDED
FROM ATT
WHERE AL = 'S'
GROUP BY SC, SN)
SELECT STU.ID, STU.SC, STU.SN,
ISNULL(CTE1.UNEXCUSED, '') AS UNX,
ISNULL(CTE2.SUSPENDED, '') AS SUS
FROM CTE2
FULL JOIN CTE1
ON CTE1.SC = CTE2.SC
AND CTE1.SN = CTE2.SN
JOIN STU
ON (CTE1.SC = STU.SC
AND CTE1.SN = STU.SN)
OR (CTE2.SC = STU.SC
AND CTE2.SN = STU.SN)
WHERE STU.SC IN (1,2,4,9,11,15)
これは出力のサンプルです:
ID SC SN UNX SUS
4291432 15 602 0 8
4296250 15 688 6 3
4216462 15 695 0 12
4916602 15 623 0 2
4295193 1 150 1 0
4215874 2 216 1 0
4005707 15 297 1 0
ありがとうございました。