首页 新闻 会员 周边

高分请教plsql动态行列转换问题,急,在线等,请高手帮帮忙

0
悬赏园豆:60 [待解决问题]

在plsql中转换下面的数据表,其中sql中取到的数据如下,由于每个月的LBNAME不一致,在这里需要将所有不同的LBNAME取出,并且按列排列,并且转换的时候自动将1月—12月的其他月份补齐,为了画图表所用,请各位高手帮忙,在线等
  GJZQSJ LBNAME ITEM
1 8月 安全环保 1
2 8月 科研质量 1
3 9月 科研质量 2
转换为:
GJZQSJ 安全环保 科研质量
1月               0           0
2月               0           0
3月               0           0
4月               0           0
5月               0           0
6月               0           0
7月               0           0
8月               1           1
9月               0           2
10月             0           0
11月             0           0
12月             0           0

chenzi1222的主页 chenzi1222 | 初学一级 | 园豆:140
提问于:2010-11-01 09:55
< >
分享
所有回答(2)
0

select gjzqsj, SUM(case lbname when '安全环保' then item end) as '安全环保',
  SUM(case lbname when '科研质量' then item end) as '科研质量' from cn_blog group by gjzqsj

 

刚测试过,有个小问题,你自己解决了

GJZQSJ    安全环保 科研质量
8月              1          1

9月              null        2

like%'远远'% | 园豆:635 (小虾三级) | 2010-11-01 10:45
0

select gjzqsj, SUM(case lbname when '安全环保' then item end) as '安全环保',
  SUM(case lbname when '科研质量' then item end) as '科研质量' from cn_blog group by gjzqsj

这个解决了行编列的问题、但是没有实现动态交叉的目的。

动态交叉得用到拼接sql:拼接 SUM(case lbname when '安全环保' then item end) as '安全环保',
 这段内容。

得到最终的

select gjzqsj, SUM(case lbname when '安全环保' then item end) as '安全环保',
  SUM(case lbname when '科研质量' then item end) as '科研质量',.... from cn_blog group by gjzqsj

邢少 | 园豆:10926 (专家六级) | 2010-11-01 13:40
感觉你们说的是一回事,还是没有解决问题,高手在哪里啊
支持(0) 反对(0) chenzi1222 | 园豆:140 (初学一级) | 2010-11-02 11:31
declare @sql varchar(2000) set @sql='select gjzqsj ' select @sql=@sql+',sum(case lbname when 动态项 then item end) as 动态项' from 动态项集合表 set @sql=@sql+' from cn_blog group by gjzqsj' execl(@sql) 一楼的语句是正确的,但是他的是固定交叉。我说的是动态交叉。就是列根据行项目的多少自动增加。
支持(0) 反对(0) 邢少 | 园豆:10926 (专家六级) | 2010-11-03 08:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册