2011-12-29 4 views
1

case文で複数の行を返したい。出来ますか?それを行うには別の方法がありますか?case文が複数の行を返す

select 
    case 
     when 3 = 1 
      then (select orderid from order_master where noOfInstallment = installmentPaid) 
     else 
      (select orderid from order_master where noOfInstallment <> installmentPaid) 
    END 

両方のサブクエリが複数の行を返します。今すぐ次のエラーを示す上記のクエリ。

サブクエリが1より大きい値を返しました。 =、!=、<、< =、>、> =、またはサブクエリが式として使用されている場合は、これは許可されません。

答えて

0

私は解決策を得ました。

SELECT o.* FROM Order_Master as o Where 
    (
     ((@paymentStatus = 0) AND (o.noOfInstallment <> o.installmentPaid)) 
     OR 
     ((@paymentStatus=1) AND (o.noOfInstallment = o.installmentPaid)) 
    ) 
2
SQL Server内の

CASEは、フロー制御文ではありません(それはC#でswitchの文とは異なるのです) - ちょうどいくつかの可能な値のいずれかを返すために使われています。

あなたは、T-SQLでIF

IF 3 = 1 
    select orderid from order_master where noOfInstallment = installmentPaid 
ELSE 
    select orderid from order_master where noOfInstallment <> installmentPaid 

またはこのようなものを使用する必要があります。

+0

実際には、複数のクエリを書きたくありません。上記のクエリの結果セットを別のサブクエリに使用します。 – Abhi

+0

@Abhi:このように 'CASE'を使用することはできません。**単一値**のみを返すことができます。複数の値を返すサブクエリがある場合、これを処理するために 'CASE'を使用することはできません –

0

ケースステートメントを正しく使用していない場合は、documentationをご覧ください。

は、次のようなクエリを使用して管理することができます。

select orderid, 
    case 
     when (noOfInstallment = installmentPaid) then 
     'equal' 
     else 
     'not equal' 
    END 
from order_master 
+0

サブクエリが1行しか返さない場合、私のクエリは正常に動作しています。サブクエリが複数の行を返すと失敗します。クエリを書くための正確な方法を教えてください。 – Abhi

関連する問題