我用sql查出来的结果集。
CITY 年份 一级天数与有效监测天数 年度一级天数最多的月份 历年I级天数最多的月份 占年度百分比
鞍山 2005 9/361 2005-08 2005-08 2%
鞍山 2006 7/363 2006-07 2005-08 2%
鞍山 2008 8/156 2008-05 2005-08 5%
鞍山 2004 7/211 2004-07 2005-08 3%
鞍山 2007 10/363 2007-08 2005-08 3%
安阳 2003 0/1
安阳 2002 0/1
包头 2003 0/1
鞍山 2005 9/361 2005-08 2005-08 2%
鞍山 2006 7/363 2006-07 2005-08 2%
鞍山 2008 8/156 2008-05 2005-08 5%
鞍山 2004 7/211 2004-07 2005-08 3%
鞍山 2007 10/363 2007-08 2005-08 3%
安阳 2003 0/1 想实现下的面格式.
不同城市不同年份空气质量I级天数对比分析
序号 城市 I级天数/有效监测天数
2002 2003 2004 2005 2006
1 北京
2 天津
3 石家庄
4 秦皇岛
CITY 年份 一级天数与有效监测天数 年度一级天数最多的月份 历年I级天数最多的月份 占年度百分比
鞍山 2005 9/361 2005-08 2005-08 2%
鞍山 2006 7/363 2006-07 2005-08 2%
鞍山 2008 8/156 2008-05 2005-08 5%
鞍山 2004 7/211 2004-07 2005-08 3%
鞍山 2007 10/363 2007-08 2005-08 3%
安阳 2003 0/1
安阳 2002 0/1
包头 2003 0/1
鞍山 2005 9/361 2005-08 2005-08 2%
鞍山 2006 7/363 2006-07 2005-08 2%
鞍山 2008 8/156 2008-05 2005-08 5%
鞍山 2004 7/211 2004-07 2005-08 3%
鞍山 2007 10/363 2007-08 2005-08 3%
安阳 2003 0/1 想实现下的面格式.
不同城市不同年份空气质量I级天数对比分析
序号 城市 I级天数/有效监测天数
2002 2003 2004 2005 2006
1 北京
2 天津
3 石家庄
4 秦皇岛
max(decode(年份,'2005',一级天数与有效监测天数,null)) "2005"再配合group by 城市 ,就可以出来
不固定列的话,麻烦
http://topic.csdn.net/u/20080416/11/910e40c1-60f1-441f-8b0f-19a969d30f77.html
max(decode(年份,2002,监测天数,null)) 2002,
max(decode(年份,2003,监测天数,null)) 2003,
...
max(decode(年份,2006,监测天数,null)) 2006,
from table
group by city
只是因为你事先不知道会出现哪些列...
只能在过程中先查出会出现的列,再拼成SQL.
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
(得到如下结果):
姓名 语文 数学 物理
---- ---- ---- ----
李四 74 84 94
张三 74 83 93
-------------------
*/create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into tb values('张三' , '语文' , 74)
insert into tb values('张三' , '数学' , 83)
insert into tb values('张三' , '物理' , 93)
insert into tb values('李四' , '语文' , 74)
insert into tb values('李四' , '数学' , 84)
insert into tb values('李四' , '物理' , 94)
静态写法1、case when 写法 select 姓名,
max(case 课程 when '数学' then 分数 else 0 end 数学,
max(case 课程 when '语文' then 分数 else 0 end 语文,
max(case 课程 when '物理' then 分数 else 0 end 物理
from TB group by 姓名2、decode写法
select 姓名,
max(decode (课程,'数学',分数,0)) 数学,
max(decode (课程,'语文',分数,0)) 语文,
max(decode (课程,'物理',分数,0)) 物理
from TB group by 姓名动态写法declare
lv_sql varchar2(1000);
sql_command varchar2(5000);
cursor cur is select 课程 from TB group by 课程;
begin
sql_command := 'select 姓名';
for i in cur loop
-- decode 写法
sql_command := sql_command||' , max(decode(课程,'''||i.课程||''', 分数,0)) ' ||i.课程;
-- case when 写法
sql_command := sql_command||',max(case 课程 when '''||i.课程||''' then 分数 else 0 end ' || i.课程;
end loop;
sql_command := sql_command||' from TB group by 姓名'; lv_sql := 'insert into temp_ss ' || sql_command;
dbms_output.put_line(lv_sql);
execute immediate lv_sql;end;
你可以根据这个例子更改一下,把你的数据填到这里就可以了,希望对你有帮助