快速SQL语法问题

时间:2011-06-09 20:34:02

标签: sql sql-server syntax

我有一个标准插入/ 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

这是返回错误。我如何格式化它以使其正常工作,为这三个字段选择零或在其他情况下的语句中运行我的情况。谢谢!

3 个答案:

答案 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)

取出IFBEGIN / 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子句即可。

http://msdn.microsoft.com/en-us/library/ms181765.aspx

答案 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 ...