Когда есть метки в разных столбцах, как установить столбец для отображения строгой метки или нуля на сервере SQL - PullRequest
0 голосов
/ 09 июля 2019

У меня есть таблица в SQL Server, как показано ниже:

Name  Col1  Col2  Col3  Col4 
A     din   gla   gif   cla 
B     gla   cla   gif   din
C     din   gif   cla   null  --gla is missing
D     null  cla   gla   null  --din and gif is missing

Важно только, если у «имени» есть метка в любом из столбцов или нет. Мне нужно вернуть набор результатов таким образом, чтобы каждый столбец представлял определенное значение, как показано ниже:

Name  Col1  Col2  Col3  Col4 
A     din   gla   gif   cla
B     din   gla   gif   cla
C     din   null  gif   cla
D     null  gla   null  cla

Я справился с запросом вроде:

select name,
       col1 = case when col1='din' or col2='din' or col3='din' or col4='din' then 'din' else null end,
       ...
from table

Однако в оригинале есть много столбцов, а не только 4, и этот способ мне не кажется лучшим. Интересно, можете ли вы порекомендовать лучшие подходы? Любой совет будет оценен.

1 Ответ

1 голос
/ 09 июля 2019

Ваш метод в порядке.Альтернативный метод будет использовать apply:

select t.name, v.*
from t cross apply
     (select max(case when col = 'din' then 'din' end) as din,
             max(case when col = 'gla' then 'gla' end) as gla,
             . . .
      from (values (col1), (col2), (col3), (col4)) v(col
     ) v;
...