首页 新闻 会员 周边 捐助

复杂的数据库查询(销售统计分析)问题

0
悬赏园豆:200 [已解决问题] 解决于 2010-05-26 08:30

表 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 控件中绑定的结果。

问题补充: 按部门统计结果: 工号 姓名 上海 北京 数量1 金额1 数量2 金额2 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 我把问题再简化一下,目前已经可以实现下面的结果,但是上面的结果如何实现? SELECT 工号 ,姓名 ,COUNT(姓名) AS 数量1 , sum(金额) as 金额1 ,Department FROM [表a] where 地区=’上海’ GROUP BY 工号 ,姓名 工号 姓名 上海 数量1 金额1 001 员工一 0 0 002 员工二 1 3 003 员工三 2 9 004 员工四 0 0 005 员工五 1 8 SELECT 工号 ,姓名 ,COUNT(姓名) AS 数量2 , sum(金额) as 金额2 ,Department FROM [表a] where 地区=’北京’ GROUP BY 工号 ,姓名 工号 姓名 北京 数量2 金额2 001 员工一 1 2 002 员工二 0 0 003 员工三 0 0 004 员工四 2 13 005 员工五 0 0
张晓飞2008的主页 张晓飞2008 | 初学一级 | 园豆:0
提问于:2010-05-23 11:00
< >
分享
最佳答案
0

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

收获园豆:200
随风飘零 | 菜鸟二级 |园豆:425 | 2010-05-23 12:11
如果是只有一个地区的情况是可以这样实现的。但目前地区需要3-4个,我也综合了大家给的方案,想到了一个可以实现的我这边需求的方法。仍然感谢你的建议。
张晓飞2008 | 园豆:0 (初学一级) | 2010-05-25 08:28
其他回答(4)
0

  你没说这些员工属于什么部门是怎么区分的啊?

剑冰 | 园豆:90 (初学一级) | 2010-05-23 11:06
表中的数据用颜色区分了,每一个员工都对应有自己的部门,第一个字段就是部门。
支持(0) 反对(0) 张晓飞2008 | 园豆:0 (初学一级) | 2010-05-23 11:17
0

想完全达到你的显示结果仅仅靠sql是实现不了的,你这个能够做的就是用动态sql统计出按照部门分组的数据。

清海扬波 | 园豆:825 (小虾三级) | 2010-05-23 13:10
0

可以根据查询条件动态生成sql语句,不过这样就没有办法利用sql缓存,如果数据量比较大就会很慢。

建议:

根据不同的查询条件,比如按部门统计,按员工统计,按地区统计等等情况,分别创建相应的存储过程,然后在程序中判断用户选择的查询条件,确定调用哪个存储过程来执行查询。

上不了岸的鱼 | 园豆:4613 (老鸟四级) | 2010-05-23 13:35
需要的是所有的查询条件都同时具备,不是单个查询条件。
支持(0) 反对(0) 张晓飞2008 | 园豆:0 (初学一级) | 2010-05-23 13:49
0

下面是按只有两个地区的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

千羽 | 园豆:666 (小虾三级) | 2010-05-24 09:25
实际情况中不可能是只有两个地区的啊。而且用max 和min做,限定了只能有2个地区的情况,不过仍然谢谢你。
支持(0) 反对(0) 张晓飞2008 | 园豆:0 (初学一级) | 2010-05-25 08:26
那就只能写存储过程,用游标循环,建临时表,最后反回临时表内容
支持(0) 反对(0) 千羽 | 园豆:666 (小虾三级) | 2010-05-25 10:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册