두 테이블의 연령대 수를 합산하려고 합니다. 두 테이블의 합계를 가져와 하나의 보기에 표시할 수 있었지만 대피 센터 중복을 가져오고 각 대피 센터에 대해 한 행에 모든 합계를 표시하는 방법을 알 수 없습니다.
각 테이블에 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
나는 당신이 원하는 것을 이해했기를 바랍니다.
먼저 두 개의 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
질문의 두 번째 부분은각 대피 센터의 한 행에 모든 합계가 있습니다. 이미 이런 결과가 나왔는지는 모르겠습니다.
그렇지 않은 경우 예를 제공하고 SQL 데이터베이스 또는 SQL 언어를 언급해 주세요. 키워드를 사용하여 얻을 수 있는 결과를 원한다고 가정합니다.
OVER PARTITION BY