表 a: 员工销售统计表
部门
|
工号
|
姓名
|
负责地区
|
销售金额
|
部门一
|
001
|
员工一
|
北京
|
2
|
部门一
|
002
|
员工二
|
上海
|
3
|
部门一
|
003
|
员工三
|
上海
|
4
|
部门一
|
003
|
员工三
|
上海
|
5
|
部门二
|
004
|
员工四
|
北京
|
6
|
部门二
|
004
|
员工四
|
北京
|
7
|
部门二
|
005
|
员工五
|
上海
|
8
|
表 a: 员工销售统计表
部门
|
工号
|
姓名
|
负责地区
|
销售金额
|
部门一
|
001
|
员工一
|
北京
|
2
|
部门一
|
002
|
员工二
|
上海
|
3
|
部门一
|
003
|
员工三
|
上海
|
4
|
部门一
|
003
|
员工三
|
上海
|
5
|
部门二
|
004
|
员工四
|
北京
|
6
|
部门二
|
004
|
员工四
|
北京
|
7
|
部门二
|
005
|
员工五
|
上海
|
8
|
按部门统计结果:
/*************************************************************/
工号
|
姓名
|
上海
|
北京
|
||
出现数量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
|
一共4个查询语句
select * from (select 工号,姓名,count(case 负责地区 when '上海' then 姓名 end) as 上海出现数量,isNull(sum(case 负责地区 when '上海' then 销售金额 end),0) as 上海金额 from 员工销售统计表 group by 工号,姓名
) as 上海
select * from (select 工号,姓名,count(case 负责地区 when '北京' then 姓名 end) as 北京出现数量,isNull(sum(case 负责地区 when '北京' then 销售金额 end),0) as 北京金额 from 员工销售统计表 group by 工号,姓名
) as 北京
select * from (SELECT DISTINCT 姓名 AS 姓名 FROM 员工销售统计表) AS 姓名
SELECT dbo.上海.工号, dbo.姓名.姓名, dbo.北京.北京出现数量, dbo.北京.北京金额, dbo.上海.上海出现数量, dbo.上海.上海金额
FROM dbo.姓名 INNER JOIN
dbo.上海 ON dbo.姓名.姓名 = dbo.上海.姓名 INNER JOIN
dbo.北京 ON dbo.姓名.姓名 = dbo.北京.姓名
先不管效率,可多写几个子查询即可