我正在处理一个非常长的tsql查询(Query1(。我想替换Query1中的一个查询(query2(,以提高Query1的性能。正在被query2替换的查询是query3。
....[column]/Case when (query2) <> 0 then (query2)
else 1 end) * ....
query2返回一列。我为替换query2而构建的查询(即query3(也返回相同的列。但是当我用query2替换query3时,我得到了以下错误。
子查询返回了多个值。当子查询跟随=,!=>=或者当子查询用作表达式">
query2:
select sum(column1)
from [Table1]
Where ....
group by .....
我创建了一个带有内部联接的表,并使用select语句获取数据作为查询3。
查询4:with tableabc as (query)
查询3:select [theonlycolumn_in tableabc] from tableabc
如果where
子句将grouping by
所在的列筛选为单个值,那么query2可能会返回标量值。
如果你想排除query3至少返回一个0值的结果,你可以这样做:
case when 0 not in (query3) then (query2) ...
但在您的查询中,您不能用..then (query3)
替换...then (query2)
,因为您不能在不加入结果集的情况下将列除以从结果集返回的另一列,因为sql server如何知道第一列应该除以第二列中的哪个值。对于此类操作,您必须具有联接条件。