214

私のクエリは次のとおりで、その中にサブクエリが含まれています。

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

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

4

6 に答える 6

272

WHERE A_ID IN (subquery)句で比較を行うために、サブクエリで 2 つ (または複数) の列を返すことはできません。どの列と比較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)
于 2009-12-15T00:09:34.840 に答える
98

戻り値を変数に割り当てるwhereクエリでは、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
于 2011-10-07T08:13:22.257 に答える
14

それは文句を言っている

COUNT(DISTINCT dNum) AS ud 

サブクエリ内。存在するクエリを実行していない限り、サブクエリから返される列は 1 つだけです。同じ列を2回カウントしたい理由がわかりません。表面的には、あなたがしていることに冗長に見えます。ここでのサブクエリは単なるフィルターであり、結合とは異なります。つまり、取得する列を指定するのではなく、データを制限するために使用します。

于 2009-12-14T23:56:19.563 に答える
5

念のため、このエラーの原因は次のとおりです。jsonを返す手順が必要でしたが、for jsonパスを省略しました:

set @jsonout = (SELECT ID, SumLev, Census_GEOID, AreaName, Worksite 
            from CS_GEO G (nolock) 
                join @allids a on g.ID = a.[value] 
            where g.Worksite = @worksite)

ストアド プロシージャを保存しようとすると、エラーがスローされました。手順の最後にfor json パスをコードに追加して修正しました。

set @jsonout = (SELECT ID, SumLev, Census_GEOID, AreaName, Worksite 
            from CS_GEO G (nolock) 
                join @allids a on g.ID = a.[value] 
            where g.Worksite = @worksite for json path)
于 2020-12-22T19:16:01.670 に答える