Sql Server 2008中根据条件求和
Posted
技术标签:
【中文标题】Sql Server 2008中根据条件求和【英文标题】:Finding sum based on the condition in Sql Server 2008 【发布时间】:2013-08-28 20:49:52 【问题描述】:我的表中有这些列
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 卢比,即 3*2500 = 7500。
现在是折扣部分。请参阅以下几点:
条件:
如果未给予折扣,则将分配给销售人员的奖励将超过 BSP 的 1%。
如果给予预订的折扣介于 0.1% 到 1% 之间,则将向销售人员分配 0.75% 的 BSP。
如果给予预订的折扣介于 1 .1% 到 2% 之间,则 BSP 的 0.50% 将分配给销售人员的奖励。
如果给予预订的折扣在 2% 及以上之间,则为 0.25% BSP 将分配给销售人员的激励。
在上面的表格中,我们清楚地看到 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)
【问题讨论】:
除了单词问题,你能显示想要的结果吗? @AaronBertrand 查看我更新的问题 【参考方案1】:对于条件求和,只需使用带有 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
【讨论】:
以上是关于Sql Server 2008中根据条件求和的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server 2008 R2 中的 select 语句中编写条件
SQL Server:对列的每个组值求和(或差),直到在另一列上满足条件
sql server 2008 merge matched判定条件
2 - SQL Server 2008 之 使用SQL语句为现有表添加约束条件