Как отображать строки без совокупного результата подсчета? - PullRequest
1 голос
/ 18 июня 2020

У меня есть таблица, содержащая Job, City и PersonName (кто работает в этом городе) . Я хочу вернуть все рабочие места и города, даже если в этом городе никто не работает. Это простой пример:

Создание таблицы:

CREATE TABLE #Data
(
    Job varchar(50),
    City varchar(50),
    PersonName varchar(50)
)

INSERT INTO #Data
VALUES 
    ('Teacher', 'New-York', 'John')
    ,('Teacher', 'Los-Angeles', 'Mary')
    ,('Fireman', 'New-York', 'Sam')

Мой запрос

SELECT 
    [Job]
    , [City]
    ,COUNT(PersonName) AS NumberOfPeopleWorkingThere
FROM #Data 
GROUP BY [Job], [City]
ORDER BY [Job], [City]

Мой результат

Fireman    New-York      1
Teacher    Los-Angeles   1
Teacher    New-York      1

Но я хотел бы иметь:

Fireman    Los-Angeles   0    -> this row in addition
Fireman    New-York      1
Teacher    Los-Angeles   1
Teacher    New-York      1

Понятия не имею, как это сделать, не могли бы вы помочь мне, пожалуйста?

1 Ответ

3 голосов
/ 18 июня 2020

Это ответ на исходную версию вопроса.

Используйте cross join для генерации строк, а затем left join:

SELECT j.job, c.city,
       COUNT(PersonName) AS NumberOfPeopleWorkingThere
FROM (SELECT DISTINCT job FROM #Data) j CROSS JOIN
     (SELECT DISTINCT city FROM #Data) c LEFT JOIN
     #Data d
     ON d.job = j.job AND d.city = c.city
GROUP BY j.job, c.city
ORDER BY j.job, c.city;
...