Включить столбец для подсчета записей с определенным значением - PullRequest
1 голос
/ 21 мая 2019

Я хочу вернуть все данные в таблицу и добавить столбец, который подсчитывает количество записей в подмножестве (скажем, количество домов по соседству).

Я пытался

CASE
    WHEN EXISTS (SELECT 1 as [parcels]
        FROM dbo.parcels p2
        WHERE p2.Neighborhood = p.Neighborhood)
    THEN COUNT([parcels]) END  -- can't count outside subquery
        as [TotalProps]

Сам подзапрос возвращает значение 1 для каждой записи свойства в любой данной окрестности, но я не могу подсчитать / сложить [parcels] вне подзапроса в выражении THEN.

Таблица ввода:

dbo.parcels
ID    Address        Neighborhood
==    =======        ============
1     123 Main St    MITO
2     124 Main St    MITO
3     200 2nd St     MITO
4     201 2nd St     MITO
5     5 Park Ave     FAIRWIND
6     1600 Baker St  GALLERY
7     1601 Baker St  GALLERY
8     1602 Baker St  GALLERY

SELECT *, <<<COUNT(neighborhood props)>>> as [TotalProps]
FROM dbo.parcels p

Ожидаемый результат:

ID    Address        Neighborhood  TotalProps
==    =======        ============  ==========
1     123 Main St    MITO          4
2     124 Main St    MITO          4
3     200 2nd St     MITO          4
4     201 2nd St     MITO          4
5     5 Park Ave     FAIRWIND      1
6     1600 Baker St  GALLERY       3
7     1601 Baker St  GALLERY       3
8     1602 Baker St  GALLERY       3

Ответы [ 3 ]

2 голосов
/ 21 мая 2019

Вы можете использовать агрегат COUNT OVER PARTITION:

SELECT
   p.*,
   COUNT(ID) OVER(PARTITION BY Neighborhood) AS TotalProps
FROM dbo.parcels p
1 голос
/ 21 мая 2019

Использовать оконные функции:

select p.*, count(*) over (partition by neighborhood)
from dbo.parcels p;
0 голосов
/ 21 мая 2019

Упрощение вещей - базовый отбор даст вам то, что вам нужно ...

SELECT
p.*,
(
    select count(*)
    FROM dbo.parcels p2
    WHERE p2.neighborhood = p1.neighborhood ) AS hoodcount
FROM dbo.parcels p
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...