Только одно выражение может быть указано в списке выборки, когда подзапрос не представлен с, СУЩЕСТВУЕТ

Мой запрос следующим образом и содержит подзапрос в нем:

 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.`

Когда я выполняю один только подзапрос, он возвращается очень хорошо, таким образом, я предполагаю, что существует некоторая проблема с основным запросом?

164
задан Manuel Antonio Rivera Socarras 15 August 2019 в 23:16
поделиться

2 ответа

You can't return two (or multiple) columns in your subquery to do the comparison in the WHERE A_ID IN (subquery) clause - which column is it supposed to compare A_ID to? Your subquery must only return the one column needed for the comparison to the column on the other side of the IN. So the query needs to be of the form:

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

You also want to add sorting so you can select just from the top rows, but you don't need to return the COUNT as a column in order to do your sort; sorting in the ORDER clause is independent of the columns returned by the query.

Try something like this:

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)
217
ответ дан 23 November 2019 в 21:13
поделиться

Он жалуется на

COUNT(DISTINCT dNum) AS ud 

внутри подзапроса. Только один столбец может быть возвращен из подзапроса, если вы не выполняете существующий запрос. Я не уверен, почему вы хотите дважды подсчитывать один и тот же столбец, на первый взгляд это выглядит избыточным по сравнению с тем, что вы делаете. Подзапрос здесь представляет собой только фильтр , это не то же самое, что соединение. т.е. вы используете его для ограничения данных, а не для указания, какие столбцы возвращать.

10
ответ дан 23 November 2019 в 21:13
поделиться