サブクエリが EXISTS で導入されていない場合、選択リストに指定できる式は 1 つだけです
-
19-09-2019 - |
質問
私のクエリは次のとおりで、その中にサブクエリが含まれています。
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
句で比較を行うには、あなたのサブクエリで2つ(または複数)の列を返すことはできませんか?あなたのサブクエリは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)
他のヒント
あなたが変数に返された値を代入どこクエリで1列のみ1行を返す必要があります。例:
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
サブクエリの内部。あなたが存在しているクエリを実行している場合を除きつだけの列がサブクエリから返されます。私は表面的にそれはあなたがやっていることへの冗長に見える、あなたは二度同じ列の数をやりたい理由はわかりません。ここでのサブクエリは、のをフィルタリングするには、参加すると同じではありません。すなわち、あなたが戻って取得するにはどのような列を指定しないで、データを制限するために使用します。
ここでの非常に優れた応答とは別に、サブクエリをそのまま使用したい場合は、これを試すこともできます。
アプローチ:
1) サブクエリから目的の列 (1 つだけ) を選択します
2) 列名をマップする場所を使用します
コード:
SELECT count(distinct dNum)
FROM myDB.dbo.AQ
WHERE A_ID in
(
SELECT A_ID
FROM (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
) a
)
所属していません StackOverflow