1. ホーム
  2. sql

[解決済み】EXISTSでサブクエリを導入しない場合、セレクトリストには1つの式しか指定できません。

2022-04-09 07:45:27

質問

私のクエリは次のようなもので、その中にサブクエリが含まれています。

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

サブクエリを単独で実行すると、問題なく返されるので、メインクエリに何か問題があると思われるのですが?

解決方法は?

で比較を行うために、サブクエリで2つの(あるいは複数の)カラムを返すことはできません。 WHERE A_ID IN (subquery) 句のどのカラムを比較するのでしょうか。 A_ID を指定できますか?サブクエリが返すのは、比較に必要な1つのカラムだけでなければなりません。 IN . ですから、クエリーは次のような形式にする必要があります。

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

また、上の行からだけ選択できるようにソートを追加したいのですが、ソートを行うために COUNT をカラムとして返す必要はありません; ソートは ORDER 節は、クエリから返されるカラムとは無関係です。

こんな感じで試してみてください。

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)