任何人都可以告诉我如何翻译以下T-SQL语句:
SELECT fileld1 = CASE
WHEN T.option1 THEN -1
ELSE
CASE WHEN T.option2 THEN 0
ELSE 1
END
END
FROM Table1 AS T
关键是我需要从表中为select语句中的单个字段验证两个不同的选项。
我试图用pl / sql中的IF语句做某事,但它对我不起作用:
SELECT IF T.option1 THEN -1
ELSE IF T.option2 THEN 0
ELSE 1
END
FROM Table1 AS T
我实际上不确定如何在SELECT语句中编写IF语句。
而且,我需要在select语句中执行它,因为我正在构建一个视图。
答案 0 :(得分:3)
使用:
SELECT CASE
WHEN T.option1 = ? THEN -1
WHEN T.option2 = ? THEN 0
ELSE 1
END AS field1
FROM Table1 AS T
我无法让你的原始TSQL工作 - 我得到:
Msg 4145,Level 15,State 1,Line 4 在预期条件的上下文中指定的非布尔类型的表达式,接近'THEN'。
...因为没有价值评估。如果您要检查列是否为空,则需要使用:
SELECT CASE
WHEN T.option1 IS NULL THEN -1
WHEN T.option2 IS NULL THEN 0
ELSE 1
END AS field1
FROM Table1 AS T
...或者如果你需要它们不是空的话:
SELECT CASE
WHEN T.option1 IS NOT NULL THEN -1
WHEN T.option2 IS NOT NULL THEN 0
ELSE 1
END AS field1
FROM Table1 AS T
CASE表达式shortcircuit - 如果第一个WHEN匹配,则返回值&退出该行的处理 - 因此不考虑之后的选项。
答案 1 :(得分:1)
如果我没记错的话,PL / SQL也支持case
。您只需要在表达式之后将列别名从“field1=
”移到表达式之后的“AS filed1
”。