关于使用sql语句sum(case when……)来实现分类汇总功能

比如有一张表有这样四个字段:月份、销售人员、销售数量、产品单价。我希望以月份和销售人员来对销售额进行透视,编写了以下SQL语句:
select
月份,
sum (case when 销售人员='姓名1' then 销售数量*产品单价 else 0 end) as 姓名1销售额,
sum (case when 销售人员='姓名2' then 销售数量*产品单价 else 0 end) as 姓名1销售额,
sum (case when 销售人员='姓名3' then 销售数量*产品单价 else 0 end) as 姓名1销售额
from 表格
group by 月份

但是获得的结果老是跟我用EXCEL数据透视表得到的结果不同。以上语句有什么问题吗?

有两处有笔误,如果结果不同的话,需要检查一下,先对比下总金额,再对比各个的销售额,再检查姓名是否完全一致,EXCEL中经常有前后空格或是不容易显示出来的字符会有影响,用select 月份,姓名,sum(销售数量*产品单价) from 表格 group by 月份,姓名

例如:

select

月份,

sum (case when 销售人员='姓名1' then 销售数量*产品单价 else 0 end) as 姓名1销售额,

sum (case when 销售人员='姓名2' then 销售数量*产品单价 else 0 end) as 姓名1销售额,

sum (case when 销售人员='姓名3' then 销售数量*产品单价 else 0 end) as 姓名1销售额

from 表格

group by 月份,销售人员

扩展资料:

注意事项

case when有用两种用法如下:

用法一:

CASE case_value

    WHEN when_value THEN statement_list

    [WHEN when_value THEN statement_list] ...

    [ELSE statement_list]

END CASE

用法二:

CASE

    WHEN search_condition THEN statement_list

    [WHEN search_condition THEN statement_list] ...

    [ELSE statement_list]

END CASE

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-18

你是要按月分和销售人员来对销售额透视,而sql语句只对月份分组,正确结果应该增加分组维度

select
月份,
sum (case when 销售人员='姓名1' then 销售数量*产品单价 else 0 end) as 姓名1销售额,
sum (case when 销售人员='姓名2' then 销售数量*产品单价 else 0 end) as 姓名1销售额,
sum (case when 销售人员='姓名3' then 销售数量*产品单价 else 0 end) as 姓名1销售额
from 表格
group by 月份,销售人员

第2个回答  推荐于2017-10-04
语句没问题,有两处有笔误,如果结果不同的话,需要检查一下,先对比下总金额,再对比各个的销售额,再检查姓名是否完全一致,EXCEL中经常有前后空格或是不容易显示出来的字符会有影响,推荐用select 月份,姓名,sum(销售数量*产品单价) from 表格 group by 月份,姓名本回答被提问者采纳
第3个回答  2014-02-17
语句应该不是这样用的,试试:
select 月份,姓名,sum(销售数量*产品单价) from 表格 group by 月份,姓名
这样跟EXCEL数据透视表得到的结果相同本回答被网友采纳
第4个回答  2014-02-17
因为字段里面有NULL值,透视表算的数据应该是不对的
相似回答