Проблема с выбором Distinct и объединением

Проблема с выбором Distinct и объединением

Я пытаюсь суммировать возрастные диапазоны из двух таблиц. Мне удалось отобразить итоги из обеих таблиц в одном представлении, но не могу понять, как убрать дубликаты эвакуационных центров и вывести все итоги в одной строке для каждого эвакуационного центра.

Когда я добавляю 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 вместо UNION ALL, чтобы соответствовать первой части вопросачтобы получить дубликаты эвакуационного центра.

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

Теперь сделайте ваши СУММЫ, используя

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

Связанный контент