【问题标题】:Case statement for multiple columns多列的 case 语句
【发布时间】:2016-08-09 18:47:10
【问题描述】:

我有 2 个问题。

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

如果 colB =1 那么 colC = 'Tom1' else if colD = 'Jef' 的前 3 个字符,然后 colC = 'Tom2' 否则为空。

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

请帮帮我,我需要在这里。

提前致谢

【问题讨论】:

  • 这是mysql还是SQL Server?你已经标记了两者。
  • CASE WHEN colB = 1 AND colC = 'Tom1' THEN '' WHEN LEFT(colID,3) = 'Jef' AND colC = 'Tom2' THEN '' ELSE NULL END
  • ColC 没有名为“Tom1”或“Tom2”的值。我需要用case语句@Lamak来完成它

标签: sql sql-server


【解决方案1】:

您想要的逻辑似乎并不完整。例如,您实际上希望保留当前 colA 值的值是什么?你正在写 colb = 1 然后 colC = 'Tom1'...我假设应该是 and。

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

如果您只想保留 ColA 值,那么您实际上可以将 yoru case 语句与 OR 结合起来

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

【讨论】:

  • 问题看起来一样
  • 如何将默认值 '12:00 pm' 添加到整数列??
【解决方案2】:

假设您在生成 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多