Проблема в вашем предложении WHERE
.Он удаляет все цвета, кроме «красный», «синий» и «зеленый», поэтому вы не учитываете другие цвета.Удалите предложение WHERE
, и все в порядке.
ОБНОВЛЕНИЕ: Вы хотите показывать только события, которые имеют хотя бы одну запись для красного, зеленого или синего.Поэтому добавьте предложение HAVING
или поместите запрос в подзапрос, чтобы использовать WHERE
.Вот некоторые варианты:
ИСПОЛЬЗУЯ с отдельными условиями:
SELECT
EventId as event,
COUNT(DISTINCT MicrosoftId) as size,
SUM(CASE WHEN name = 'red' THEN 1 ELSE 0 END) as red,
SUM(CASE WHEN name = 'blue' THEN 1 ELSE 0 END) as blue,
SUM(CASE WHEN name = 'green' THEN 1 ELSE 0 END) as green
FROM TagsMSCV
GROUP BY EventId
HAVING SUM(CASE WHEN name = 'red' THEN 1 ELSE 0 END) > 0
OR SUM(CASE WHEN name = 'blue' THEN 1 ELSE 0 END) > 0
OR SUM(CASE WHEN name = 'green' THEN 1 ELSE 0 END) > 0
ORDER BY event;
ИМЕЯ с одним составным условием:
SELECT
EventId as event,
COUNT(DISTINCT MicrosoftId) as size,
SUM(CASE WHEN name = 'red' THEN 1 ELSE 0 END) as red,
SUM(CASE WHEN name = 'blue' THEN 1 ELSE 0 END) as blue,
SUM(CASE WHEN name = 'green' THEN 1 ELSE 0 END) as green
FROM TagsMSCV
GROUP BY EventId
HAVING SUM(CASE WHEN name IN ('red', 'blue', 'green') THEN 1 ELSE 0 END) > 0
ORDER BY event;
ГДЕ на отдельных условиях:
SELECT *
FROM
(
SELECT
EventId as event,
COUNT(DISTINCT MicrosoftId) as size,
SUM(CASE WHEN name = 'red' THEN 1 ELSE 0 END) as red,
SUM(CASE WHEN name = 'blue' THEN 1 ELSE 0 END) as blue,
SUM(CASE WHEN name = 'green' THEN 1 ELSE 0 END) as green
FROM TagsMSCV
GROUP BY EventId
) q
WHERE red > 0 OR blue > 0 OR green > 0
ORDER BY event;
ГДЕ при сложном условии:
SELECT *
FROM
(
SELECT
EventId as event,
COUNT(DISTINCT MicrosoftId) as size,
SUM(CASE WHEN name = 'red' THEN 1 ELSE 0 END) as red,
SUM(CASE WHEN name = 'blue' THEN 1 ELSE 0 END) as blue,
SUM(CASE WHEN name = 'green' THEN 1 ELSE 0 END) as green
FROM TagsMSCV
GROUP BY EventId
) q
WHERE red + blue + green > 0
ORDER BY event;