1

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

両方のサブクエリは複数の行を返します。次のエラーを示すクエリの上にあります。

サブクエリは複数の値を返しました。サブクエリが=、!=、<、<=、>、> =の後に続く場合、またはサブクエリが式として使用される場合、これは許可されません。

4

3 に答える 3

2

SQL ServerのCASEは、フロー制御ステートメントではありません(C#のステートメントとは異なりswitchます)。これは、いくつかの可能な値の1つを返すために使用されるだけです。

IFT-SQLでステートメントを使用する必要があります

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

またはこのようなもの。

于 2011-12-29T07:51:48.037 に答える
0

case ステートメントを正しい方法で使用していません。ドキュメントを参照してください。

次のようなクエリで管理できますか。

select orderid,  
   case 
      when (noOfInstallment = installmentPaid) then
        'equal'   
      else 
        'not equal'
   END
from order_master
于 2011-12-29T08:05:14.527 に答える
0

私は解決策を得ました。

 SELECT o.* FROM Order_Master as o Where 
   (
      ((@paymentStatus = 0) AND (o.noOfInstallment <> o.installmentPaid))
      OR 
      ((@paymentStatus=1) AND (o.noOfInstallment = o.installmentPaid)) 
   )
于 2011-12-31T10:23:51.443 に答える