#sql #sql-server #tsql
Вопрос:
Если у меня есть выражение case, есть ли способ, чтобы оно не работало как водопад?
Например, если у меня есть следующий набор данных:
group value
---------------
derek 5
cait 1
david 2
denver 3
Есть ли способ, которым я могу показать следующие результаты
CASE
WHEN group like 'd%' then d
WHEN group like 'de% then de
ELSE other
Показывать
group value
--------------
d 10
de 8
other 3
Прямо сейчас это показывает, как
group value
--------------
d 10
other 2
Комментарии:
1. Что значит «как водопад»? Вам просто нужно перевернуть свои
when
детали и сначала выбрать наиболее конкретные.2. @ДалеК — Нет, они хотят удвоить сумму, когда она соответствует обоим
Ответ №1:
Вместо этого вы можете использовать left join
:
select coalesce(which, 'other'), sum(t.value)
from t left join
(values ('d%', 'd'), ('de%', 'de')
) v(pattern, which)
on t.group like v.pattern
group by which;
Ответ №2:
вы можете использовать UNION.
SELECT 'd' [group], SUM(Value)[Value] FROM <table_name> WHERE [GROUP] LIKE 'd%'
UNION
SELECT 'de' [group], SUM(Value)[Value] FROM <table_name> WHERE [GROUP] LIKE 'de%'
UNION
SELECT 'other' [group], SUM(Value)[Value] FROM <table_name> WHERE [GROUP] NOT LIKE 'd%' OR [GROUP] NOT LIKE 'de%'