一个sql高级测试
下面是一个数据表,表名为a 数据内容如下
地区代码 人数 人员类型
05010100 2038 社保补贴
05010200 94 社保补贴
05010300 483 社保补贴
05010400 385 社保补贴
05010500 214 社保补贴
05010600 433 社保补贴
05010700 961 社保补贴
05010800 44 社保补贴
05010900 22 社保补贴
05011000 60 社保补贴
05010100 147 公益性岗位
05010200 12 公益性岗位
05010300 25 公益性岗位
05010400 16 公益性岗位
05010500 4 公益性岗位
05010600 59 公益性岗位
05010700 56 公益性岗位
05011000 1 公益性岗位
05010100 3450 下岗失业人员
05010200 182 下岗失业人员
05010300 877 下岗失业人员
05010400 771 下岗失业人员
05010500 573 下岗失业人员
05010600 928 下岗失业人员
05010700 1896 下岗失业人员
05010800 97 下岗失业人员
05010900 196 下岗失业人员
05011000 132 下岗失业人员
05010100 257 就业培训
05010200 32 就业培训
05010300 73 就业培训
05010400 28 就业培训
05010500 15 就业培训
05010600 85 就业培训
05010700 142 就业培训
05010800 2 就业培训
05010900 3 就业培训
05011000 9 就业培训
现要想通过sql语句生成下面的效果,请问该怎么做?地区代码 下岗失业人数 社保补贴人数 公益性岗位人数 就业培训人数
05010100 xx xx xx xx
05010200 xx xx xx xx
05010300 xx xx xx xx
05010400 xx xx xxx xx
05010500 xx xx xx xx
05010600 xx xx xx xx
05010700 xx xxx xx xx
05010800 xx xx xx xx
05010900 xx xx xx xx
05011000 xx xx xx xx
下面是一个数据表,表名为a 数据内容如下
地区代码 人数 人员类型
05010100 2038 社保补贴
05010200 94 社保补贴
05010300 483 社保补贴
05010400 385 社保补贴
05010500 214 社保补贴
05010600 433 社保补贴
05010700 961 社保补贴
05010800 44 社保补贴
05010900 22 社保补贴
05011000 60 社保补贴
05010100 147 公益性岗位
05010200 12 公益性岗位
05010300 25 公益性岗位
05010400 16 公益性岗位
05010500 4 公益性岗位
05010600 59 公益性岗位
05010700 56 公益性岗位
05011000 1 公益性岗位
05010100 3450 下岗失业人员
05010200 182 下岗失业人员
05010300 877 下岗失业人员
05010400 771 下岗失业人员
05010500 573 下岗失业人员
05010600 928 下岗失业人员
05010700 1896 下岗失业人员
05010800 97 下岗失业人员
05010900 196 下岗失业人员
05011000 132 下岗失业人员
05010100 257 就业培训
05010200 32 就业培训
05010300 73 就业培训
05010400 28 就业培训
05010500 15 就业培训
05010600 85 就业培训
05010700 142 就业培训
05010800 2 就业培训
05010900 3 就业培训
05011000 9 就业培训
现要想通过sql语句生成下面的效果,请问该怎么做?地区代码 下岗失业人数 社保补贴人数 公益性岗位人数 就业培训人数
05010100 xx xx xx xx
05010200 xx xx xx xx
05010300 xx xx xx xx
05010400 xx xx xxx xx
05010500 xx xx xx xx
05010600 xx xx xx xx
05010700 xx xxx xx xx
05010800 xx xx xx xx
05010900 xx xx xx xx
05011000 xx xx xx xx
dqdm VARCHAR2(10),
rs NUMBER(18,0),
rylx VARCHAR2(40));SELECT dqdm as "地区代码",
sum(decode(rylx,'下岗失业人员',rs,0)) AS "下岗失业人数",
sum(decode(rylx,'社保补贴',rs,0)) AS "社保补贴人数",
sum(decode(rylx,'公益性岗位',rs,0)) AS "公益性岗位人数",
sum(decode(rylx,'就业培训',rs,0)) AS "就业培训人数"
from a
group by dqdm;INSERT INTO a(dqdm,rs,rylx) values('05010100',2038,'社保补贴');
INSERT INTO a(dqdm,rs,rylx) values('05010200',94,'社保补贴');
INSERT INTO a(dqdm,rs,rylx) values('05010300',483,'社保补贴');
INSERT INTO a(dqdm,rs,rylx) values('05010400',385,'社保补贴');
INSERT INTO a(dqdm,rs,rylx) values('05010500',214,'社保补贴');
INSERT INTO a(dqdm,rs,rylx) values('05010600',433,'社保补贴');
INSERT INTO a(dqdm,rs,rylx) values('05010700',961,'社保补贴');
INSERT INTO a(dqdm,rs,rylx) values('05010800',44,'社保补贴');
INSERT INTO a(dqdm,rs,rylx) values('05010900',22,'社保补贴');
INSERT INTO a(dqdm,rs,rylx) values('05011000',60,'社保补贴');
INSERT INTO a(dqdm,rs,rylx) values('05010100',147,'公益性岗位');
INSERT INTO a(dqdm,rs,rylx) values('05010200',12,'公益性岗位');
INSERT INTO a(dqdm,rs,rylx) values('05010300',25,'公益性岗位');
INSERT INTO a(dqdm,rs,rylx) values('05010400',16,'公益性岗位');
INSERT INTO a(dqdm,rs,rylx) values('05010500',4,'公益性岗位');
INSERT INTO a(dqdm,rs,rylx) values('05010600',59,'公益性岗位');
INSERT INTO a(dqdm,rs,rylx) values('05010700',56,'公益性岗位');
INSERT INTO a(dqdm,rs,rylx) values('05011000',1,'公益性岗位');
INSERT INTO a(dqdm,rs,rylx) values('05010100',3450,'下岗失业人员');
INSERT INTO a(dqdm,rs,rylx) values('05010200',182,'下岗失业人员');
INSERT INTO a(dqdm,rs,rylx) values('05010300',877,'下岗失业人员');
INSERT INTO a(dqdm,rs,rylx) values('05010400',771,'下岗失业人员');
INSERT INTO a(dqdm,rs,rylx) values('05010500',573,'下岗失业人员');
INSERT INTO a(dqdm,rs,rylx) values('05010600',928,'下岗失业人员');
INSERT INTO a(dqdm,rs,rylx) values('05010700',1896,'下岗失业人员');
INSERT INTO a(dqdm,rs,rylx) values('05010800',97,'下岗失业人员');
INSERT INTO a(dqdm,rs,rylx) values('05010900',196,'下岗失业人员');
INSERT INTO a(dqdm,rs,rylx) values('05011000',132,'下岗失业人员');
INSERT INTO a(dqdm,rs,rylx) values('05010100',257,'就业培训');
INSERT INTO a(dqdm,rs,rylx) values('05010200',32,'就业培训');
INSERT INTO a(dqdm,rs,rylx) values('05010300',73,'就业培训');
INSERT INTO a(dqdm,rs,rylx) values('05010400',28,'就业培训');
INSERT INTO a(dqdm,rs,rylx) values('05010500',15,'就业培训');
INSERT INTO a(dqdm,rs,rylx) values('05010600',85,'就业培训');
INSERT INTO a(dqdm,rs,rylx) values('05010700',142,'就业培训');
INSERT INTO a(dqdm,rs,rylx) values('05010800',2,'就业培训');
INSERT INTO a(dqdm,rs,rylx) values('05010900',3,'就业培训');
INSERT INTO a(dqdm,rs,rylx) values('05011000',9,'就业培训');
SELECT dqdm as "地区代码",
sum(decode(rylx,'下岗失业人员',rs,0)) AS "下岗失业人数",
sum(decode(rylx,'社保补贴',rs,0)) AS "社保补贴人数",
sum(decode(rylx,'公益性岗位',rs,0)) AS "公益性岗位人数",
sum(decode(rylx,'就业培训',rs,0)) AS "就业培训人数"
from a
group by dqdm
order by dqdm;
已写入 file afiedt.buf 1 select 地区代码,
2 sum(case when 人员类型='社保补贴' then 人数 else 0 end) "社保补贴人数",
3 sum(case when 人员类型='公益性岗位' then 人数 else 0 end) "公益性岗位人数",
4 sum(case when 人员类型='下岗失业人员' then 人数 else 0 end) "下岗失业人员人数",
5 sum(case when 人员类型='就业培训' then 人数 else 0 end) "就业培训人数"
6 from tb
7 group by 地区代码
8* order by 地区代码
9 /地区代码 社保补贴人数 公益性岗位人数 下岗失业人员人数 就业培训人数
---------- ------------ -------------- ---------------- ------------
05010100 2038 147 3450 257
05010200 94 12 182 32
05010300 483 25 877 73
05010400 385 16 771 28
05010500 214 4 573 15
05010600 433 59 928 85
05010700 961 56 1896 142
05010800 44 0 97 2
05010900 22 0 196 3
05011000 60 1 132 9已选择10行。
from tb
pivot
(sum(人数 )
for 人员类型 in ('下岗失业人员','社保补贴','公益性岗位','就业培训')
)x