MS SQL: проверить несколько условий и вернуть объединенный результат в виде поля в операторе выбора - PullRequest
0 голосов
/ 28 марта 2019

Я реализую запрос MS SQL, в котором мне нужно проверить все условия и получить объединенный результат в одном поле (OupputField) в виде строки.

Таблица: Заказчик

Id  Customer Type Active
------------------------
1   John     1    1     
2   Bob      2    0     
3   TOM      0    1     

Я пытаюсь получить OupputField значений, проверяя ALL различные случаи.но он проверяет одно истинное условие и возвращает результат.Мне нужно проверить все случаи и нужно вернуть объединенный результат как OutputField

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

Id  Customer Type Active OutputField
--------------------------------------
1   John     1    1      Type1, Active
2   Bob      2    0      Type2
3   TOM      0    1      Active

MS SQL Query:

select 
    Id,
    Customer,
    TypeId
    Active
    COALESCE
    (
     CASE 
        WHEN  TypeId = 1 
        THEN  'Type1'
     END,
     CASE 
        WHEN  Active = 1 
        THEN  'Active'
     END
    )
from Customer

Я что-то не так делаю?Пожалуйста, помогите мне.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 28 марта 2019
CREATE TABLE #tmp(Id int, Customer varchar(20), TypeId int, Active int)
INSERT INTO #tmp (Id,Customer,TypeId,Active) VALUES(1,'John',1,1)
INSERT INTO #tmp (Id,Customer,TypeId,Active) VALUES(2,'Bob',2,0)
INSERT INTO #tmp (Id,Customer,TypeId,Active) VALUES(3,'TOM',0,1)
INSERT INTO #tmp (Id,Customer,TypeId,Active) VALUES(4,'Jim',0,0)

select Id,    Customer,
    TypeId
    Active,
    CASE WHEN TypeID >0 THEN 'TypeId' + CAST(TypeID as varchar(3)) ELSE '' END +
        CASE WHEN TypeID > 0 AND Active > 0 THEN ', ' ELSE '' END + 
            CASE WHEN Active > 0 THEN 'Active'  ELSE '' END OutputField
from #tmp
0 голосов
/ 28 марта 2019
select case when type = 0 and active = 0 then ''
            when type = 0 and active = 1 then 'Active'
            when type > 0 and active = 0 then 'Type' + cast(type as varchar)
            when type > 0 and active = 1 then 'Type' + cast(type as varchar) + ', Active'
       end as result
from your_table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...