2 つのテーブルから年齢範囲のカウントを合計しようとしています。両方のテーブルの合計を 1 つのビューに表示することはできましたが、避難所の重複を取り除いて、各避難所の合計を 1 行に表示する方法がありません。
各テーブルに Select Distinct を追加するとエラーが発生します。
SELECT dbo.tblGenPopRegistration_DEV.EvacCenter AS [Evac Center], SUM(CASE WHEN dbo.tblGenPopRegistration_DEV.Age < 6 THEN 1 ELSE 0 END) AS [5 and Under],
SUM(CASE WHEN dbo.tblGenPopRegistration_DEV.Age BETWEEN 6 AND 17 THEN 1 ELSE 0 END) AS [6 to 17],
SUM(CASE WHEN dbo.tblGenPopRegistration_DEV.Age > 17 THEN 1 ELSE 0 END) AS [18 and Over]
FROM dbo.tblGenPopRegistration_DEV
WHERE (dbo.tblGenPopRegistration_DEV.CheckedIn = 1)
Group by dbo.tblGenPopRegistration_DEV.EvacCenter
UNION ALL
SELECT dbo.tblGenPopAdditionalRegistrations_DEV.EvacCenter AS [Evac Center], SUM(CASE WHEN dbo.tblGenPopAdditionalRegistrations_DEV.Age < 6 THEN 1 ELSE 0 END) AS [5 and Under],
SUM(CASE WHEN dbo.tblGenPopAdditionalRegistrations_DEV.Age BETWEEN 6 AND 17 THEN 1 ELSE 0 END) AS [6 to 17],
SUM(CASE WHEN dbo.tblGenPopAdditionalRegistrations_DEV.Age > 17 THEN 1 ELSE 0 END) AS [18 and Over]
FROM dbo.tblGenPopAdditionalRegistrations_DEV
Group by dbo.tblGenPopAdditionalRegistrations_DEV.EvacCenter
答え1
あなたの希望を理解できたと思います。
まず、2つのSELECTを次のように組み合わせます。質問の最初の部分に一致させるために、UNION ALLではなくUNIONを使用していることに注意してください。避難所の重複を排除する。
SELECT dbo.tblGenPopRegistration_DEV.EvacCenter AS [Evac Center],
dbo.tblGenPopRegistration_DEV.Age
FROM dbo.tblGenPopRegistration_DEV
WHERE (dbo.tblGenPopRegistration_DEV.CheckedIn = 1)
UNION
SELECT dbo.tblGenPopAdditionalRegistrations_DEV.EvacCenter AS [Evac Center],
dbo.tblGenPopAdditionalRegistrations_DEV.Age
FROM dbo.tblGenPopAdditionalRegistrations_DEV
次にSUMを使って計算します。
SELECT EvacCenter AS [Evac Center],
SUM(CASE WHEN Age < 6 THEN 1 ELSE 0 END) AS [5 and Under],
SUM(CASE WHEN Age BETWEEN 6 AND 17 THEN 1 ELSE 0 END) AS [6 to 17],
SUM(CASE WHEN Age > 17 THEN 1 ELSE 0 END) AS [18 and Over]
FROM (
SELECT dbo.tblGenPopRegistration_DEV.EvacCenter as EvacCenter,
dbo.tblGenPopRegistration_DEV.Age as Age
FROM dbo.tblGenPopRegistration_DEV
WHERE (dbo.tblGenPopRegistration_DEV.CheckedIn = 1)
UNION
SELECT dbo.tblGenPopAdditionalRegistrations_DEV.EvacCenter as EvacCenter,
dbo.tblGenPopAdditionalRegistrations_DEV.Age as Age
FROM dbo.tblGenPopAdditionalRegistrations_DEV
) GROUP BY EvacCenter
質問の2番目の部分は各避難センターの合計を 1 行にまとめます。 この結果がすでに出ているかどうかはわかりません。
そうでない場合は、例を示し、SQLデータベースまたはSQL方言を記載してください。キーワードを使用して得られる結果がほしいのだと思います。
OVER PARTITION BY