Estou tentando somar as contagens de faixa etária de duas tabelas. Consegui fazer com que os totais de ambas as tabelas fossem exibidos em uma visualização, mas não consigo descobrir como obter duplicatas do centro de evacuação e ter todos os totais em uma linha para cada centro de evacuação.
Quando adiciono um Select Distinct a cada tabela, recebo erros.
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
Responder1
Espero ter entendido o que você quer.
Primeiro combine seus dois SELECTs assim. Observe que usamos UNION em vez de UNION ALL para corresponder à primeira parte da perguntapara retirar duplicatas do centro de evacuação.
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
Agora faça seus SUMs usando
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
A segunda parte da sua pergunta étenha todos os totais em uma linha para cada centro de evacuação. Não sei se já temos esse resultado.
Caso contrário, forneça um exemplo e mencione seu banco de dados SQL ou dialeto SQL. Suponho que você queira um resultado que possa obter usando as palavras-chave
OVER PARTITION BY