是否可以使用此格式的WHERE CLAUSE中的CASE语句

时间:2015-01-08 09:26:33

标签: sql sql-server-2008

我编写了一个SQL查询,它将返回一组结果,但返回的结果集不够精确!所以我现在要做的是修剪结果集以获得我需要的确切信息!我想要的每个项目都会返回多行,我正在寻找一个特定的行来返回给用户。

所以我想在where子句中搜索一个值,只从该项中选择所需的条件!我在where子句中编写了这个case语句,但是我无法使它有效地运行:

and SourceType.Name = (CASE When SourceType.Name = '7550RTU' Then 
                        Select Quantity.Name from Quantity
                        Where Quantity.Name = 'DI-S1 Cnt'
                    End)

2 个答案:

答案 0 :(得分:1)

and SourceType.Name = (CASE When SourceType.Name = '7550RTU' Then 
                        (Select Quantity.Name from Quantity
                         Where Quantity.Name = 'DI-S1 Cnt')
                    End)

即。将子查询放在括号之间。 (请记住,子查询不应该在这里返回多行。)

但如果你仔细观察,你会发现一些逻辑问题。

子选择(Select Quantity.Name from Quantity Where Quantity.Name = 'DI-S1 Cnt')将返回值' DI-S1 Cnt'或NULL(如果不存在这样的行)。

这意味着CASE将返回' DI-S1 Cnt' (如果SourceType.Name =' 7550RTU'并且子选择行存在),或者为NULL(如果和SourceType.Name<>' 7550RTU'或者不存在子选择行。)

如果SourceType.Name为' 7550RTU',并且CASE返回' DI-S1 Cnt',则比较为FALSE。如果SourceType.Name是' 7550RTU'并且CASE返回NULL,比较未知/ NULL。如果SourceType.Name不是' 7550RTU',则比较为FALSE(或NULL。)

所以主要的问题是,你想在这做什么?

答案 1 :(得分:0)

如果您的问题是该子查询是否会返回超过1行,您可以从查询返回的select top1数据列表中选择前1条记录