Выражение СЛУЧАЯ SQL Server, которое не приводит к водопаду

#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%'