SQL 不同条件求和

左手青春右手年华 2017-02-05 03:42:59
先说明下情况 :
假设 有一张表名为SaleReport,销售额字段为SaleMoeny ,销售类型为SaleType,销售员字段为Saler,其他字段或略
销售类型 SaleType=1时 表示正常销售,SaleType=2时表示销售退货

——————————————————————————————————————
id saler saletype salemoeny

1 张三 1 100
2 李四 1 50
3 王五 1 80
4 张三 2 20
——————————————————————————————————————
现在用sql语句 列出每个人的销售额,某销售员存在saletype 1,2 要在sql做加减法,只显示一个合并后的值
...全文
584 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
先说明下情况 : 假设 有一张表名为SaleReport,销售额字段为SaleMoeny ,销售类型为SaleType,销售员字段为Saler,其他字段或略 销售类型 SaleType=1时 表示正常销售,SaleType=2时表示销售退货,SaleType=3时表示销售冲红…… —————————————————————————————————————— id saler saletype salemoeny 1 张三 1 100 2 李四 1 50 3 王五 1 80 4 张三 2 20 —————————————————————————————————————— 现在用sql语句 列出每个人的销售额,某销售员存在saletype 1,2 要在sql做加减法,只显示一个合并后的值(即现在要明确saletype=1的情况-saletype=2的情况
二月十六 2017-02-05
  • 打赏
  • 举报
回复
引用 2 楼 jxetv 的回复:
我想问下 如果这个saletype有1,2,3,4几种不同的值(不同情形) 你这个语句还适用吗?其实我想要明确就是相同人员 就是类型1-类型2(而不是类型1-其他类型)
那就只对1、2类型进行类型1-类型2的统计,其他的不统计是吧?那就这样:
;WITH SaleReport(id,saler,saletype,salemoeny)AS(
select 1,'张三',1,100  union all 
select 2,'李四',1,50  union all 
select 3,'王五',1,80  union all 
select 4,'张三',2,20 union ALL
select 5,'张三',3,20                 --添加了类型为3,但不统计,最后结果一样
)
SELECT  saler ,
        SUM(CASE WHEN saletype = 1 THEN salemoeny
		     WHEN saletype = 2 THEN -salemoeny
                 ELSE 0
            END) AS salemoeny
FROM    SaleReport
GROUP BY saler
结果和上边那个一样,并且没有统计类型为3的。
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
语句:
;WITH SaleReport(id,saler,saletype,salemoeny)AS(
select 1,'张三',1,100  union all 
select 2,'李四',1,50  union all 
select 3,'王五',1,80  union all 
select 4,'张三',2,20 
)
SELECT  saler ,
        SUM(CASE WHEN saletype = 1 THEN salemoeny
                 ELSE -salemoeny
            END) AS salemoeny
FROM    SaleReport
GROUP BY saler
结果:
我想问下 如果这个saletype有1,2,3,4几种不同的值(不同情形) 你这个语句还适用吗?其实我想要明确就是相同人员 就是类型1-类型2(而不是类型1-其他类型)
二月十六 2017-02-05
  • 打赏
  • 举报
回复
语句:
;WITH SaleReport(id,saler,saletype,salemoeny)AS(
select 1,'张三',1,100 union all
select 2,'李四',1,50 union all
select 3,'王五',1,80 union all
select 4,'张三',2,20
)
SELECT saler ,
SUM(CASE WHEN saletype = 1 THEN salemoeny
ELSE -salemoeny
END) AS salemoeny
FROM SaleReport
GROUP BY saler


结果:



27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧