表 a: 员工销售统计表
部门 |
工号 |
姓名 |
负责地区 |
销售金额 |
部门一 |
001 |
员工一 |
北京 |
2 |
部门一 |
002 |
员工二 |
上海 |
3 |
部门一 |
003 |
员工三 |
上海 |
4 |
部门一 |
003 |
员工三 |
上海 |
5 |
部门二 |
004 |
员工四 |
北京 |
6 |
部门二 |
004 |
员工四 |
北京 |
7 |
部门二 |
005 |
员工五 |
上海 |
8 |
/********************结果效果图*********************************/
按部门统计结果:
部门:部门一
工号 |
姓名 |
上海 |
北京 |
||
数量 |
金额 |
数量 |
金额 |
||
001 |
员工一 |
0 |
0 |
1 |
2 |
002 |
员工二 |
1 |
3 |
0 |
0 |
003 |
员工三 |
2 |
9 |
0 |
0 |
部门:部门二
工号 |
姓名 |
上海 |
北京 |
||
数量 |
金额 |
数量 |
金额 |
||
004 |
员工四 |
0 |
0 |
2 |
13 |
005 |
员工五 |
1 |
8 |
0 |
0 |
使用sql查询员工销售统计表(表 a)中的数据,返回一个按照部门和地区销售业绩的结果并且能在gridview或repear 控件中绑定的结果。
NID NUMBER Y 工号ID
NNAME VARCHAR2(20) Y 员工姓名
NPART NUMBER Y 所属部门
ADDRESS VARCHAR2(20) Y 地址
NMOENY sNUMBER Y 金额
Select NID,NName,sum(NMoeny) from ABC Where NPart=部门 Group by Address,NID,NName
你没说这些员工属于什么部门是怎么区分的啊?
想完全达到你的显示结果仅仅靠sql是实现不了的,你这个能够做的就是用动态sql统计出按照部门分组的数据。
可以根据查询条件动态生成sql语句,不过这样就没有办法利用sql缓存,如果数据量比较大就会很慢。
建议:
根据不同的查询条件,比如按部门统计,按员工统计,按地区统计等等情况,分别创建相应的存储过程,然后在程序中判断用户选择的查询条件,确定调用哪个存储过程来执行查询。
下面是按只有两个地区的sql ,如果超出两个地区,我想只能在存储过程里写了
select gonghao,max(xingming) xingming ,max(cnum) cnum,max(sjine) sjine,min(cnum) mnum,min(sjine) mjine from
(SELECT diqu, gonghao,max(xingming) as xingming,count(gonghao) as cnum,sum(jine) as sjine
FROM [SCTest].[dbo].[test1]
where bumen = 1
group by gonghao,diqu) as tab1
group by gonghao
表:
1 1 name1 dress1 5
1 1 name1 dress1 2
1 1 name1 dress2 6
2 2 name2 dress1 6
2 2 name2 dress2 2
2 2 name2 dress2 3
1 3 name3 dress1 9
1 3 name3 dress2 10
结果:
1 name1 2 7 1 6
3 name3 1 10 1 9