case语句返回多行

时间:2011-12-29 07:46:16

标签: sql-server subquery case-statement

我想在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。子查询遵循=,!=,&lt;,&lt; =,&gt;,&gt; =或使用子查询时不允许这样做   作为表达。

3 个答案:

答案 0 :(得分: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

或类似的东西。

答案 1 :(得分:0)

您没有以正确的方式使用案例陈述,请在documentation处取消。

您可以使用以下查询进行管理:

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

答案 2 :(得分:0)

我得到了解决方案。

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