Problemas con Select Distinct y Union

Problemas con Select Distinct y Union

Estoy tratando de sumar los recuentos del rango de edad de dos tablas. Pude obtener los totales de ambas tablas para mostrarlos en una sola vista, pero no puedo entender cómo sacar los duplicados del centro de evacuación y tener todos los totales en una fila para cada centro de evacuación.

Cuando agrego un Select Distinct a cada tabla, obtengo errores.

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

Respuesta1

Espero haber entendido lo que quieres.

Primero combine sus dos SELECT de esta manera. Tenga en cuenta que utilizamos UNION en lugar de UNION ALL para que coincida con la primera parte de la pregunta.sacar duplicados del centro de evacuación.

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

Ahora haz tus SUMAS 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

La segunda parte de tu pregunta estenga todos los totales en una fila para cada centro de evacuación. No sé si ya tenemos este resultado.

De lo contrario, proporcione un ejemplo y mencione su base de datos SQL o dialecto SQL. Supongo que quieres un resultado que puedas obtener usando las palabras clave.

OVER PARTITION BY

información relacionada