我有一个标准插入/ select语句,其格式与此类似:
insert into Table
( ...,
...)
select
field1,
field2,
field3,
field4,
fieldetc
from .... etc
select语句中有三个特定字段需要根据另一个字段选择不同的值,让我们称之为checker,三个字段是field2,field3和field 4.这些值将是0或者在其他情况需要一个案例。我的问题是,如何格式化if / else语句,以便它可以在select语句中工作?我现在如何拥有它是这样的:
select
field1data,
if checker = 'A' or checker is null
begin
0,
0,
0,
end
else
begin
case when ... then ... else ... end,
case when ... then ... else ... end,
case when ... then ... else ... end,
end
fieldetcdata
from... etc
这是返回错误。我如何格式化它以使其正常工作,为这三个字段选择零或在其他情况下的语句中运行我的情况。谢谢!
答案 0 :(得分:5)
您需要分别为每个字段指定case语句。
Select field1data,
Case When IsNull(Checker,'A') = 'A' Then 0
When Cond1 Then Whatever1
...
Else ...
End,
Case When IsNull(Checker,'A') = 'A' Then 0
When Cond2 Then Whatever1
...
Else ...
End,
Case When IsNull(Checker,'A') = 'A' Then 0
When Cond2 Then Whatever1
...
ELSE ...
End,
fieldetcdata
From ETC
答案 1 :(得分:3)
取出IF
和BEGIN
/ END
内容,它应该有效。
CASE COALESCE(checker,'A') WHEN 'A' THEN 0 ELSE alternate_value END
为每个条件值SELECT
编辑:使用您的示例:
SELECT
field1data,
CASE WHEN ISNULL(checker) THEN alternate_value1
WHEN checker = 'B' THEN alternate_value11 END,
CASE WHEN ISNULL(checker) THEN alternate_value2
WHEN checker = 'B' THEN alternate_value22 END,
CASE WHEN ISNULL(checker) THEN alternate_value3
WHEN checker = 'B' THEN alternate_value3 END,
fieldetcdata
FROM
TABLE
EDIT2:对于多种情况,您只需添加WHEN
子句即可。
答案 2 :(得分:1)
根据以下评论进行编辑。
您需要使用具有多个WHEN条件的CASE语句。
SELECT
field1data,
CASE COALESCE(checker, 'A') WHEN 'A' THEN 0 WHEN condition2 THEN ... ELSE ... END,
CASE COALESCE(checker, 'A') WHEN 'A' THEN 0 WHEN condition2 THEN ... ELSE ... END,
CASE COALESCE(checker, 'A') WHEN 'A' THEN 0 WHEN condition2 THEN ... ELSE ... END,
CASE COALESCE(checker, 'A') WHEN 'A' THEN 0 WHEN condition2 THEN ... ELSE ... END,
CASE COALESCE(checker, 'A') WHEN 'A' THEN 0 WHEN condition2 THEN ... ELSE ... END
FROM ...