近期要做佣金报表,遇到一个统计问题,写下来请各位指教一下
现在有个佣金奖励表,是根据销售明细整理出来的,当销售单数量两对以上(包含两对)奖励10元/单,当销售单数量三对以上(包含三对)额外再奖励5元/单,销售单号 店员代号 销售数量 两对佣金 两对以上佣金
00001 001 2 10 0
00002 001 3 10 5
00003 002 4 10 5
00004 001 5 10 5
00005 002 2 10 0
......要求输出的报表格式如下店员代号 两对佣金总和 两对单据数量 两对以上佣金总和 两对以上单据数量
001 30 3 10 2
002 20 2 5 1我是采用左连接的办法来处理的select a.店员代号,a.两对佣金总和,a.两对单据数量,b.两对以上佣金总和,b.两对以上单据数量级 from (
select 店员代号,count(两对佣金) 两对佣金总和,sum(销售单号) 两对单据数量 from 佣金奖励表 where 销售数量>1 group by 店员代号) a,
select 店员代号,count(两对佣金) 两对以上佣金总和,sum(销售单号) 两对以上单据数量 from 佣金奖励表 where 销售数量>2 group by 店员代号) b
on a.店员代号=b.店员代号我觉得这样处理很笨,但局限于自己所学有限,又想不出更好的办法,请问各位大虾有没更好的办法呢?多谢指教!
现在有个佣金奖励表,是根据销售明细整理出来的,当销售单数量两对以上(包含两对)奖励10元/单,当销售单数量三对以上(包含三对)额外再奖励5元/单,销售单号 店员代号 销售数量 两对佣金 两对以上佣金
00001 001 2 10 0
00002 001 3 10 5
00003 002 4 10 5
00004 001 5 10 5
00005 002 2 10 0
......要求输出的报表格式如下店员代号 两对佣金总和 两对单据数量 两对以上佣金总和 两对以上单据数量
001 30 3 10 2
002 20 2 5 1我是采用左连接的办法来处理的select a.店员代号,a.两对佣金总和,a.两对单据数量,b.两对以上佣金总和,b.两对以上单据数量级 from (
select 店员代号,count(两对佣金) 两对佣金总和,sum(销售单号) 两对单据数量 from 佣金奖励表 where 销售数量>1 group by 店员代号) a,
select 店员代号,count(两对佣金) 两对以上佣金总和,sum(销售单号) 两对以上单据数量 from 佣金奖励表 where 销售数量>2 group by 店员代号) b
on a.店员代号=b.店员代号我觉得这样处理很笨,但局限于自己所学有限,又想不出更好的办法,请问各位大虾有没更好的办法呢?多谢指教!
解决方案 »
- ms sql 管理器是图形化管理界面,操作很方便是,能满足基本的ddl,还有添加user,rule,schma等,有没有必要学会通过脚本创建这些对象的语法
- 数据库垂直分割的问题
- 怎样实现从一个数据库的表取数据给另一个数据库的表?
- 我在使用BCP导出数据时出现下面这个错误,不知是何原因(数据库已启动,表名也没错)
- [菜鸟问题]sql server 2000内存问题
- sql查询统计问题,请指教
- 面试巨难问题!小弟跪求答案!
- sql问题 新手求教!
- 数据转移问题,高手请进!
- SQL Server中如何实现数据同步问题?
- 求解
- select max(starttime)-min(starttime) from temp_trc 如果把结果转换成小时,分,秒,毫秒,微妙为单位?
insert into tb values('00001' , '001' , 2 , 10 , 0)
insert into tb values('00002' , '001' , 3 , 10 , 5)
insert into tb values('00003' , '002' , 4 , 10 , 5)
insert into tb values('00004' , '001' , 5 , 10 , 5)
insert into tb values('00005' , '002' , 2 , 10 , 0)
goselect 店员代号,
两对佣金总和 = sum(两对佣金) ,
两对单据数量 = count(1),
两对以上佣金总和 = sum(两对以上佣金),
两对以上单据数量 = count(1) - 1
from tb
group by 店员代号drop table tb/*
店员代号 两对佣金总和 两对单据数量 两对以上佣金总和 两对以上单据数量
---------- ----------- ----------- ----------- -----------
001 30 3 10 2
002 20 2 5 1(所影响的行数为 2 行)
*/
店员代号,
两对佣金总和=sum(两对佣金),
两对单据数量=count(1),
两对以上佣金总和=sum(两对以上佣金),
两对以上单据数量级=sum(case when 两对以上佣金 = 0 then 0 else 1 end)
from 佣金奖励表
group by 店员代号
insert into tb values('00001' , '001' , 2 , 10 , 0)
insert into tb values('00002' , '001' , 3 , 10 , 5)
insert into tb values('00003' , '002' , 4 , 10 , 5)
insert into tb values('00004' , '001' , 5 , 10 , 5)
insert into tb values('00005' , '002' , 2 , 10 , 0)
goselect 店员代号,
两对佣金总和 = sum(两对佣金) ,
两对单据数量 = count(1),
两对以上佣金总和 = sum(两对以上佣金),
两对以上单据数量1 = count(1) - 1,
两对以上单据数量2 = CEILING(count(1)*1.0/2)
from tb
group by 店员代号drop table tb/*店员代号 两对佣金总和 两对单据数量 两对以上佣金总和 两对以上单据数量1 两对以上单据数量2
---------- ----------- ----------- ----------- ----------- --------------------
001 30 3 10 2 2
002 20 2 5 1 1(所影响的行数为 2 行)
*/
create table tb(销售单号 varchar(10),店员代号 varchar(10), 销售数量 int, 两对佣金 int, 两对以上佣金 int)
insert into tb values('00001' , '001' , 2 , 10 , 0)
insert into tb values('00002' , '001' , 2 , 10 , 5)
insert into tb values('00003' , '001' , 4 , 10 , 5)
insert into tb values('00004' , '001' , 5 , 10 , 5)
insert into tb values('00005' , '002' , 2 , 10 , 0)
goselect 店员代号,
两对佣金总和 = sum(两对佣金) ,
两对单据数量 = count(1),
两对以上佣金总和 = sum(两对以上佣金),
两对以上单据数量1 = count(1) - 1,
两对以上单据数量2 = CEILING(count(1)*1.0/2)
from tb
group by 店员代号出来的结果是
店员代号 两对佣金总和 两对单据数量 两对以上佣金总和 两对以上单据数量
001 40 4 15 3
002 10 1 0 0要想要的结果是
店员代号 两对佣金总和 两对单据数量 两对以上佣金总和 两对以上单据数量
001 40 4 10 2
002 10 1 0 0
insert into tb values('00001' , '001' , 2 , 10 , 0)
insert into tb values('00002' , '001' , 2 , 10 , 5)
insert into tb values('00003' , '001' , 4 , 10 , 5)
insert into tb values('00004' , '001' , 5 , 10 , 5)
insert into tb values('00005' , '002' , 2 , 10 , 0)
goselect 店员代号,
两对佣金总和 = sum(两对佣金) ,
两对单据数量 = count(1),
两对以上佣金总和 = case when count(1)>2 then sum(两对以上佣金)-5 else 0 end,
两对以上单据数量 = case when count(1)>2 then CEILING(count(1)*1.0-2) else 0 end
from tb
group by 店员代号 drop table tb
select 店员代号,
两对佣金总和 = sum(两对佣金) ,
两对单据数量 = count(1),
两对以上佣金总和 = sum(case when 销售数量>2 then 两对以上佣金 else 0 end),
两对以上单据数量 = sum(case when 销售数量>2 then 1 else 0 end)
from tb
where 销售数量>1
group by 店员代号