我有一个表,看起来像这样
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
总之,我正在寻找一种方法来"打印"。根据某个查询的值获得某个值
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..
您要查找的是CASE表达式。
Select [Column B], CASE
WHEN [Column a] = 1
THEN 'Hello'
ELSE '' END
FROM Table where ID = @Id
也可用于多个条件
Select [Column B], CASE
WHEN [Column a] = 1
THEN 'Hello'
WHEN [Column a] IS NULL
THEN 'Goodbye'
ELSE '' END
FROM Table where ID = @Id