日期:2014-05-16  浏览次数:20789 次

一个分类统计加行列转置的头痛问题。
涉及两个表,结构如下:
单位-人员表
dwdm ryxm ryGuid
0901 张三 ...
0901 李四 ...
0902 王五 ..
...

人员-工种-等级表
ryGuid gzdm jsdjdm
... gz1 1
... gz1 1

其中人员-工种-技术等级记录了人员所有工种和曾经获得过的等级,也就是说一个人可以有多个工种,每个工种有多个等级,但只有最高等级是有效的。工种个数是固定的,另有工种代码表,这里仅有工种代码,各种工种的等级是统一的,也另有技术等级代码表,这里可不涉及,直接按代码统计即可。
要求:
按如下格式进行统计
单位代码 工种1等级1 工种1等级2 工种1等级3 ... 工种2等级1 工种2等级2 ....工种n等级n

注意:只统计每个人的各工种最高等级
可按工种4等级5设计
 请大家帮忙,头发都快抓掉光了!


------解决方案--------------------
SQL code
SELECT dwdm, 
sum(iif(hi_Djdm='g1_01',1,0)) as G1_01,
sum(iif(hi_Djdm='g1_02',1,0)) as G1_02,
sum(iif(hi_Djdm='g1_03',1,0)) as G1_03,
sum(iif(hi_Djdm='g2_01',1,0)) as G2_01,
sum(iif(hi_Djdm='g2_02',1,0)) as G2_02,
sum(iif(hi_Djdm='g2_03',1,0)) as G2_03,
sum(iif(hi_Djdm='g3_01',1,0)) as G3_01,
sum(iif(hi_Djdm='g3_02',1,0)) as G3_02,
sum(iif(hi_Djdm='g3_03',1,0)) as G3_03
FROM (
select test1.dwdm,test2.rydm ,test2.Gzdm & '_' & max(test2.Djdm) as hi_Djdm
from test2 inner join test1 on test2.rydm=test1.rydm
group by test1.dwdm,test2.rydm,test2.Gzdm
)
GROUP BY dwdm


SQL code
dwdm    G1_01    G1_02    G1_03    G2_01    G2_02    G2_03    G3_01    G3_02    G3_03
01    0    1    1    0    1    0    1    0    0
02    1    1    0    1    0    0    0    0    0