首页 > 解决方案 > 如果列包含某个值,则选择一个预定义的字符串

问题描述

我有一张看起来像这样的桌子

ID  Column a Column b
-- --------- --------
1   1           a
2   0           b
3   1           c

Column a位类型。给定一个ID,我想要实现的是这样的:

@Id = 1 -> a, 'Hello' 
@Id = 2 -> b, ''      
@Id = 3 -> c, 'Hello' 

我试图用没有结果的 IF 和 ELSE 语句来做到这一点。我认为我不明白 IF 和 ELSE 在 SQL 中的工作原理。我试过的:

SELECT Column b
       ,IF(Column a = 1) SELECT 'Hello' ELSE SELECT ''
FROM Table where ID = @Id

总之,我正在寻找一种根据某个查询的值“打印”某个值的方法。

标签: sqlsql-server

解决方案


这就是 CASE 的用途

SELECT
  b,
  CASE a
    WHEN 1 THEN 'HELLO'
    ELSE ''
  END

CASE有两种形式:

CASE 
  WHEN boolean_test THEN result
  WHEN other_boolean_test THEN other_result --optional
  ...  --more WHENs, optional
  ELSE --optional
END

CASE x
  WHEN value_to_compare_to_x THEN result
  WHEN other_value_to_compare_to_x  THEN other_result --optional
  ... --more WHENs, optional
  ELSE --optional
END

两者都可以,但是对于解码单个列,我发现CASE column WHEN value THEN result表格更整洁。请注意,虽然您不能在这种形式中使用复杂的表达式,例如CASE x WHEN IN(1,2,3) THEN ..是不允许的;你必须使用CASE WHEN x IN(1,2,3) THEN..


推荐阅读