当子查询没有被EXISTS引入时,只能在select列表中指定一个expression式

我的查询如下,其中包含一个子查询:

select count(distinct dNum) from myDB.dbo.AQ where A_ID in (SELECT DISTINCT TOP (0.1) PERCENT A_ID, COUNT(DISTINCT dNum) AS ud FROM myDB.dbo.AQ WHERE M > 1 and B = 0 GROUP BY A_ID ORDER BY ud DESC) 

我收到的错误是…

 Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.` 

当我单独运行子查询时,它返回就好,所以我假设有主查询的问题?

你不能在你的子查询中返回两个(或多个)列来在WHERE A_ID IN (subquery)子句中进行比较 – 哪一列应该比较A_ID ? 您的子查询只能将比较所需的一列返回到IN另一侧的列。 所以查询需要是这样的forms:

 SELECT * From ThisTable WHERE ThisColumn IN (SELECT ThatColumn FROM ThatTable) 

你也想添加sorting,所以你可以select只是从顶部的行,但你不需要返回作为列COUNT为了做你的sorting; ORDER子句中的sorting独立于查询返回的列。

尝试这样的事情:

 select count(distinct dNum) from myDB.dbo.AQ where A_ID in (SELECT DISTINCT TOP (0.1) PERCENT A_ID FROM myDB.dbo.AQ WHERE M > 1 and B = 0 GROUP BY A_ID ORDER BY COUNT(DISTINCT dNum) DESC) 

您应该只返回where查询中的一列和一行,并将返回的值分配给一个variables。 例:

 select * from table1 where Date in (select * from Dates) -- Wrong select * from table1 where Date in (select Column1,Column2 from Dates) -- Wrong select * from table1 where Date in (select Column1 from Dates) -- OK 

这是抱怨

 COUNT(DISTINCT dNum) AS ud 

在子查询中。 除非正在执行存在查询,否则只能从子查询中返回一列。 我不确定你为什么要在同一列上做两次计算,表面上看起来是多余的。 子查询这里只是一个filter,它不是一个连接相同。 即您使用它来限制数据,而不是指定要返回的列。