sql根据具有现有值的其他列创建列

时间:2018-06-29 07:37:51

标签: sql tsql

我需要一些t-sql帮助才能在下表中创建列“ Grp”。基本上,我需要创建一个列来说明何时存在值,如果该值为null,则将其从“ Grp”列中排除。该表是我需要的最终结果的一个示例(现在仅存在Col1,Col2,Col3)

enter image description here

2 个答案:

答案 0 :(得分:2)

使用几个CASE表达式和一个STUFF来删除前导-

SELECT
    STUFF(
        (
            CASE WHEN T.Col1 IS NOT NULL THEN '-Col1' ELSE '' END +
            CASE WHEN T.Col2 IS NOT NULL THEN '-Col2' ELSE '' END +
            CASE WHEN T.Col3 IS NOT NULL THEN '-Col3' ELSE '' END 
        ),
        1, 1, ''),
    T.Col1,
    T.Col2,
    T.Col3
FROM
    YourTable AS T

答案 1 :(得分:0)

您可以在以下情况下使用case语句:

select 
  left(t.Grp,len(Grp)-1) as Grp,
  t.col1,t.col2,t.col3
from (    
  select col1, col2, col3,
    case when col1 is null then '' else 'col1-' +
    case when col2 is null then '' else 'col2-' +
    case when col3 is null then '' else 'col3-'
    as Grp
  from your_table
  ) t