2013-06-04 38 views
1

我正在使用双例句从表中的列中获取一个基于2个条件的值,该条件在同一个表中的2个其他列中可用,否则(否则)该函数应为null为0时为空或0。的代码使用SQL的案例句子

实施例是如下:

CASE CODE 
    WHEN 'ABC' 
     CASE NAME WHEN 'XYZ' 
     THEN 'VALUE' 
     ELSE NULL 
     END 
    ELSE NULL 
END 

的问题是,如果我使用NULL别的后则它给所有(包括空值和值0)作为NULL,或如果使用0而不是NULL的在ELSE之后,空值和0值都被赋值为0。 我试图用很多方式来写这个句子,但我不知道它没有工作。希望有人能为我提供一些很好的解决方案。

+0

为什么不'case when code ='abc'and name ='xyz'then'value'else null'? –

+0

您应该使用以下格式: http://msdn.microsoft.com/en-us/library/ms181765.aspx –

+0

我对您的示例进行了格式化,但您的示例显然很糟糕,因为您缺少'WHEN'在你的第二个'CASE'之后,你在第一个'WHEN'之后没有'THEN'。 – LittleBobbyTables

回答

3
CASE WHEN CODE = 'ABC' AND NAME = 'XYZ' THEN 'VALUE' ELSE NULL END 
0

我相信你想:

CASE WHEN CODE = 'ABC' AND NAME = 'XYZ' THEN 'VALUE' ELSE NULL END 

CASE语句的这种结构比以前WHEN坚持字段名称更灵活。

0

你想要做这样的事吗?

(CASE when CODE = 'ABC' and NAME = 'XYZ' 
     THEN 'VALUE' 
     when code = '0' or name = '0' 
     then '0' 
     ELSE NULL 
end) 

或许正是这种(基于事实,你想从一列的东西):基于您的评论

(CASE when CODE = 'ABC' and NAME = 'XYZ' 
     THEN value 
     when value is NULL or value = 0 
     then value 
     ELSE NULL 
end) 

,我认为这将工作:

(CASE when CODE = 'ABC' and NAME = 'XYZ' 
     THEN value 
     ELSE NULL 
end) 

或者是这样的:

(CASE when CODE = 'ABC' and NAME = 'XYZ' and value <> '0' 
     THEN 'value' 
     when CODE = 'ABC' and NAME = 'XYZ' and value = '0' 
     then '0' 
     ELSE NULL 
end) 

但是,我认为这相当于您的原始嵌套两个案例版本。

+0

我会这样写(当CODE ='ABC'和NAME ='XYZ'时的CASE值为 当值为0时 然后为0 ELSE NULL end) – user2453045

+0

@ user2453045。 。 。是的,这将是一个简化和逻辑等价。你是这个意思吗? –

+0

是的,这是我想要的。我希望当满足2个条件时,它在nr中给出值,当满足相同的2个条件时,但实际上的值为0,所以它给出0,否则为空......请你帮助我如何写入正确的SQL。提前致谢。 – user2453045