存储Proc以基于proc的3列的总和返回数据

时间:2015-09-17 16:56:59

标签: sql sql-server stored-procedures

我有一个存储过程如下:

SELECT   DiscountId         
        ,Discount1
        ,Discount2
        ,Discount3            
    FROM    PriceDiscount

这可以返回0或一行或多行。 我需要检查Discount1,Discount2和Discount3的总和。如果任何行的总和大于0 ,我想设置一个字段isDiscounted = true并返回它。 例如,以下内容将返回isDiscounted = true,因为其中一行的总数大于0。

Discount1 Discount2  Discount3  TotalDiscount
34.00      0.00       0.00      34.00
0.00       0.00       0.00      0.00
0.00       0.00       0.00      0.00

我不想在代码中检查这个或为此创建另一个存储过程。 我可以添加另一个聚合如下的列:

SELECT   DiscountId         
            ,Discount1
            ,Discount2
            ,Discount3 
            ,(Discount1+Discount2+Discount3) as TotalDiscount             
        FROM    PriceDiscount

现在我应该如何检查其中一个TotalDiscount是否> 0并将isDiscounted返回为true还是false?

2 个答案:

答案 0 :(得分:0)

听起来你想要一个案例陈述。添加此字段:

,CASE WHEN (Discount1+Discount2+Discount3) > 0 THEN 1 ELSE 0 END AS isDiscounted

答案 1 :(得分:0)

此版本适用于所有行。

<强> SQL Fiddle Demo

SELECT CASE
         WHEN SUM(Discount1) + SUM(Discount2) + SUM(Discount3) > 0 THEN 1
         ELSE 0
       END as isDiscount
FROM PriceDiscount;