“当子查询未引入EXISTS时,只能在选择列表中指定一个表达式”错误?

时间:2013-11-26 15:21:02

标签: sql sql-server-2008 tsql reporting-services ssrs-2008

我为ssrs报告数据集编写了此查询。该报告适用于单个参数值,并且在为参数选择多个值时会填充错误。

@iteration是一个多值报告参数。

create table #hftable
( id int ,startdate datetime, environment nvarchar(50), iteration nvarchar(50))
insert #hgtable( id , startdate,environment , iteration)
select distinct wit.id, max(wit.startdate),environment , i.iteration
from Workers wit 
join iteration i 
on wit.sckid=i.sckid
and i.iterationlabel in (@iteration)
where system_rev =(SELECT MAX(system_rev) AS system_rev
              FROM workers 
              WHERE system_id = wit.system_id)
group by wit.id, i.iteration,environment 
order by i.iteration

select count(*) ,environment from #hftable 
group by iteration,environment 
order by iteration 

1 个答案:

答案 0 :(得分:2)

此错误与您在嵌套查询中返回太多列以查找相关值有关。例如,这是错误的:

SELECT *
FROM MyTable
WHERE SomeColumn = (SELECT MAX(ThisColumn), MAX(ThatColumn) FROM OtherTable)

嵌套查询必须只返回一列进行比较:

SELECT *
FROM MyTable
WHERE SomeColumn = (SELECT MAX(ThisColumn) FROM OtherTable)

您在显示的查询中没有此问题,但这是错误的含义。也许您的报告中还有另一个查询可以执行此操作吗?有时它采取订购的形式:

SELECT *
FROM MyTable
WHERE SomeColumn IN (
    SELECT TOP 10 ThisColumn, COUNT(*) 
    FROM OtherTable 
    GROUP BY ThisColumn 
    ORDER BY COUNT(*) DESC
)

在这种情况下,您仍然可以执行所需的排序,而无需在嵌套查询的列列表中返回COUNT(*)