как сделать проверку NULL в unpivot в sql - PullRequest
0 голосов
/ 07 августа 2020

У меня есть запрос sql ниже, который я использую на сервере sql.

select distinct  [Value],Label,Id from(
select distinct [Name], Code, I as Id,I + ':' + [Value] as label, [Value]
from [test].[dbo].[emp]
unpivot
(
  [Value]
  for I in (product, model)
) as dataTable) as t

Я хочу иметь, если какой-либо [Value] внутри оператора unpivot имеет значение null, он должен возвращать 'unknown' во вложенном операторе select.

Как этого добиться?

Обновление -

//this is wrong sql. Just want to show what is required
select distinct  [Value],Label,Id from(
select distinct [Name], Code, coalesce(I as Id,'unknown'),coalesce(I,'unknown') + ':' + [Value] as label, coalesce([Value],'unknown')
from [test].[dbo].[emp]
unpivot
(
  [Value]
  for I in (product, model)
) as dataTable) as t

1 Ответ

5 голосов
/ 07 августа 2020

Кажется, вы ищете coalesce():

from (select distinct [Name], Code, I as Id,
             I + ':' + coalesce([Value], 'unknown') as label,
            [Value]
      from [test].[dbo].[emp]
     ) e

Я бы предложил написать запрос как:

Я не уверен, что вы действительно хотите, но я бы предложил написать запрос как с использованием apply.

select distinct v.id, (v.id + ':' + coalesce(v.[Value], 'unknown')) as label,
       coalesce(v.[Value], 'unknown') as value
from [test].[dbo].[emp] e cross apply
     (values (e.product, 'product'), (e.model, 'model')
     ) v(value, id);

Это кажется намного проще и, вероятно, работает лучше.

...