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