根据Sql Server 2008中的条件查找总和

时间:2013-08-28 20:49:53

标签: sql sql-server sql-server-2008 tsql

我的表中有这些列

Person      Agent     Unit        BSP            Discount

578           0      000023      32689525       0.1
578           1      000025      17589656       1
579           0      000021      32689525       0.1
579           0      000020      17589656       1
581           0      000022      32689525       0.1
583           0      000024      17589656       1
578           11     000023q     32689525       0
578           12     000025a     17589656       0

实际上我必须计算Person的奖励。比如578以上的情况说。因为它预订了4个单位,其中3个与经纪人,1个是个人。 所以从经纪人那里他的激励将是每单位2500 INR,即3 * 2500 = 7500。 现在是折扣部分。请参阅以下几点:

条件:

  1. 如果没有给予折扣,则将1%的BSP分配给销售人员的奖励。

  2. 如果预订的折扣介于.1%至1%之间,则.75%的BSP将分配给销售人员的奖励。

  3. 如果预订的折扣介于1.1%至2%之间,则.50%的BSP将分配给销售人员的奖励。

  4. 如果预订的折扣介于2%和以上之间,则为.25% BSP将分配给销售人员的奖励。

  5. 在上表中,我们清楚地知道578已经预订了4个单位,其中两个有折扣,两个没有折扣。

    所以他的奖励计算方法如下:

      var incentive = total_no_of_units_booked_with_agent * 2500;
    
    // since there might be a possibility that more than one units can be
    // booked by a sales person.No we have to find if there is any discount 
    // applied there, if its there, then extract the incentive for each unit 
    //and total it using the above condition. For table shown we have
    //since it has 4 records
    
      incentive = incentive + (.75% of BSP)+ (.75%of BSP)+(1% of BSP)+(1%of BSP) 
    

1 个答案:

答案 0 :(得分:3)

对于条件和,只需在其中使用带有CASE语句的SUM来强制执行条件。

SELECT
  person,
  SUM(CASE WHEN discount  = 0.00 THEN 0.0100 * bsp
           WHEN discount <= 0.01 THEN 0.0075 * bsp
           WHEN discount <= 0.02 THEN 0.0050 * bsp
                                 ELSE 0.0025 * bsp END
      +
      CASE WHEN agent <> 0       THEN 2500.0
                                 ELSE    0.0       END)  AS incentive
FROM
  yourTable
GROUP BY
  person