多列

时间:2016-08-09 18:47:10

标签: sql sql-server

我有两个问题。

(1)我有colA, colB, ColC, colD列。我需要更改colC中的值。 基于以下条件

如果colB = 1则colC ='Tom1'否则if  colD ='Jef'的前3个字符然后colC ='Tom2' Else Null。

(2)如何将一个默认值'12:00 pm'添加到整数列?

请在这里帮助我。

提前致谢

2 个答案:

答案 0 :(得分:0)

您所需的逻辑完整无法显示。比如你实际上想要保留当前colA值的值是什么?你正在写colb = 1然后colC =' Tom1' ...我认为那应该是和。

CASE
   WHEN colB = 1 and colC = 'Tom1' THEN ????
   WHEN LEFT(colD) = 'Jef' AND colC = 'Tom2' THEN ????
   ELSE NULL
END

如果您只想保留ColA值,那么您实际上可以将yoru案例陈述与OR结合起来

CASE
   WHEN (colB = 1 and colC = 'Tom1')
        OR (LEFT(colD) = 'Jef' AND colC = 'Tom2') THEN colA
   ELSE NULL
END

答案 1 :(得分:0)

假设您在生成colC时完全具有colB和colD的值,您可以使用以下内容:

select
    colA
    ,colB
    ,case
        when colB = 1 then 'Tom1'
        when left(colD,3) = 'Jef' then 'Tom2'
        else null
    end as colC
    ,colD

如果colB和colD也是计算列,并且您不想重复计算,则可以在子查询中执行这些操作并在外部查询中计算colC。

select
    t1.colA
    ,t1.colB
    ,case
        when t1.colB = 1 then 'Tom1'
        when left(t1.colD,3) = 'Jef' then 'Tom2'
        else null
    end as colC
    ,t1.colD
from
(
    select
        colA
        ,case when someCondition then 1 else 2 end as colB
        ,(select top 1 name from someTable) as colD
    from
        ...   -- whatever your source tables are
) t1