【问题标题】:SQL Case statement combine two fields together?SQL Case语句将两个字段组合在一起?
【发布时间】:2017-02-01 20:00:49
【问题描述】:

我对 CASE 语句有疑问。我的案例陈述如下所示:

CASE myField1
        WHEN 1 THEN 'Jump'
        WHEN 2 THEN 'Sleep'
        WHEN 3 THEN 'Eat'
        WHEN 4 THEN 'Run'
        WHEN 5 THEN 'Break'
        WHEN 6 THEN 'Move'
        WHEN 7 THEN 'Stop'
        ELSE NULL END AS TestColumn,

在此语句中,我必须根据其他字段的值再添加一个初始值。因此,如果 myField2 等于 1,则在每个 WHEN 选项的末尾可能会有一个字母 A。如果不是,那么我不会输入字母 A。输出应该是这样的:

Jump A
Sleep
Eat A
Run
Break
Move A
Stop

如何检查 SQL CASE 中的第二个字段并连接现有单词的值?如果有人可以提供帮助,请告诉我。谢谢!

【问题讨论】:

  • 简单地连接另一个CASE:|| CASE WHEN Field2 = '1' THEN ' A' ELSE '' END
  • @dnoeth 好吧,+ 在 SQL Server 中不是 ||
  • @AaronBertrand:我应该知道,但我已经习惯了标准 SQL :-)(我忽略了 SS2008 标签)

标签: sql sql-server-2008 case


【解决方案1】:

只需将它们连接在一起:

SELECT (CASE myField1
            WHEN 1 THEN 'Jump'
            WHEN 2 THEN 'Sleep'
            WHEN 3 THEN 'Eat'
            WHEN 4 THEN 'Run'
            WHEN 5 THEN 'Break'
            WHEN 6 THEN 'Move'
            WHEN 7 THEN 'Stop'
            ELSE ''
       END) + (CASE WHEN myField2 = 1 THEN 'A' ELSE '' END) AS TestColumn,

注意:我将ELSE NULL 更改为ELSE ''。这允许在前一个值没有值时出现'A'。如果+ 的任一参数是NULL,则结果是NULL

仔细观察,您需要在“A”之前留一个空格。如果您在现有值不存在时还想要“A”,请使用LTRIM()

SELECT LTRIM((CASE myField1
                WHEN 1 THEN 'Jump'
                WHEN 2 THEN 'Sleep'
                WHEN 3 THEN 'Eat'
                WHEN 4 THEN 'Run'
                WHEN 5 THEN 'Break'
                WHEN 6 THEN 'Move'
                WHEN 7 THEN 'Stop'
                ELSE ''
           END) +
          (CASE WHEN myField2 = 1 THEN ' A' ELSE '' END)
         ) AS TestColumn,

【讨论】:

  • 谢谢!这正是我想要的。我之前没有合并过一个以上的案例。这在未来可能会有所帮助。
猜你喜欢
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 2020-03-27
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多