0

郡 ID と郡名を戻したい。このクエリを修正するにはどうすればよいですか?

DECLARE @test int = 0;


select 
CASE (@test)
    when 0 then (SELECT co.Id, co.Description
                 FROM Dictionary.Counties as co
                 INNER JOIN CountyCollaboration as cc on cc.CountyId = co.Id
                 WHERE cc.CollaborationId = (SELECT cc1.CollaborationId from CountyCollaboration as cc1
                                             WHERE cc1.CountyId = 34))
END

エラーが発生しますonly one expression can be specified in the select list when the subquery is not introduced with EXISTS.

コメントアウトしco.Descriptionて を戻すだけco.Idにすると、別のエラーが発生します。subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <=, >, >=, or when the subquery is used as as expression.

4

3 に答える 3

1

クエリを次のように再構成することをお勧めします。

select id, country 
from 
(select co.id
, co.country
, case @test  code for test goes here end caseresult
from all that stuff you have as a subquery in your question
) derivedtable
于 2013-10-30T15:58:23.907 に答える
1

CASE ステートメントから返すことができる式は 1 つだけです。代わりに IF/ELSE を使用してみてください。

T-SQL の CASE ステートメントは、多くのプログラミング言語の CASE/SWITCH のような制御フロー ステートメントではありません。

于 2013-10-30T15:54:10.940 に答える
0

サブクエリが複数のフィールドと複数のレコードを返していた可能性があります。このようなサブクエリは、常に 1 つのフィールドと 1 つのレコードを返す必要があります。

INNER JOIN複数のレコードが返される原因になっていると思います。すべてのレコードの値が同じ場合は、DISTINCTまたはTOP 1.

于 2013-10-30T15:58:54.737 に答える