Суммировать значение рассчитывает на значение в 1 столбце в SQL Server - PullRequest
0 голосов
/ 14 октября 2019

Данные:

name | car color
-----+---------
mike | green
mike | blue
mike | red
bob  | green
bob  | red
tom  | blue

Желаемый результат:

name | green count | blue count | red count
-----+-------------+------------+---------
mike |      1      |      1     |    1
bob  |      1      |      0     |    1
tom  |      0      |      1     |    0

Я думал о запуске нескольких подзапросов и оставил объединение, например:

select name, count(*) as count blue
from table
where car color = 'blue'

и т. Д.

Спасибо

Ответы [ 2 ]

4 голосов
/ 14 октября 2019

Вы можете использовать условное агрегирование:

SELECT 
    name,
    SUM(CASE WHEN car_color = 'green' THEN 1 ELSE 0 END) green_count,
    SUM(CASE WHEN car_color = 'blue' THEN 1 ELSE 0 END) blue_count,
    SUM(CASE WHEN car_color = 'red' THEN 1 ELSE 0 END) red_count
FROM mytable 
GROUP BY name
2 голосов
/ 14 октября 2019

Если вы знаете цвета во время разработки, вы можете использовать сводку.

DECLARE @t TABLE
(
    personName NVARCHAR(16) NOT NULL,
    carColor NVARCHAR(16) NOT NULL
);

INSERT INTO @t
(
    personName,
    carColor
)
VALUES
('mike', 'green'),
('mike', 'blue'),
('mike', 'red'),
('bob', 'green'),
('bob', 'red'),
('tom', 'blue');

SELECT t.personName,
       t.red,
       t.blue,
       t.green
FROM
(
    SELECT pvt.*
    FROM @t t
        PIVOT
        (
            COUNT(carColor)
            FOR carColor IN ([green], [blue], [red])
        ) pvt
) AS t;

Выход:

bob     1   0   1
mike    1   1   1
tom     0   1   0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...