サブクエリが EXISTS で導入されていない場合、選択リストに指定できる式は 1 つだけです

StackOverflow https://stackoverflow.com/questions/1904314

  •  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 
   )
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top