联机帮助中的解释:
指定输入表从 column_list 中的多个列缩减为名为 pivot_column 的单个列。
此处也用一个我遇到的例子来说明:
今天得到一个EXECL文件,格式为:时间,全国,北京,天津......等35个城市列名。下面每行是每个月该城市对应的数据值。
如下图所示:
现在要求我转换为时间,地区,数值,这样的格式。想到2005的新功能pivot和unpivot是个不错的选择。但以前从来没用过。第一次用走了此弯路。写出分析,希望对大家有所帮助:
代码
说明:
这里的地区和数值这两个名字可以随便指定。地区 in后面的括号里是要转置的列名。地区是查询结果中所有转换成行的列的列名。数值这个和原表基本上没有什么关系,只是一个列名来存放地区对应的数值。只要保证select后面和unpivot后面一样就OK了。
结果如下图所示:
指定输入表从 column_list 中的多个列缩减为名为 pivot_column 的单个列。
此处也用一个我遇到的例子来说明:
今天得到一个EXECL文件,格式为:时间,全国,北京,天津......等35个城市列名。下面每行是每个月该城市对应的数据值。
如下图所示:
现在要求我转换为时间,地区,数值,这样的格式。想到2005的新功能pivot和unpivot是个不错的选择。但以前从来没用过。第一次用走了此弯路。写出分析,希望对大家有所帮助:
代码
select [时间],[地区],[数值] from asdfg
unpivot([数值] for [地区] in([全国],[北京],[天津],[石家庄],[太原],[呼和浩特],[沈阳],[大连],[长春],[哈尔滨],[上海],[南京],[杭州],[宁波],[合肥],[福州],[厦门],[南昌],[济南],[青岛],[郑州],[武汉],[长沙],[广州],[深圳],[南宁],[海口],[重庆],[成都],[贵阳],[昆明],[拉萨],[西安],[兰州],[西宁],[银川],[乌鲁木齐])) as U
unpivot([数值] for [地区] in([全国],[北京],[天津],[石家庄],[太原],[呼和浩特],[沈阳],[大连],[长春],[哈尔滨],[上海],[南京],[杭州],[宁波],[合肥],[福州],[厦门],[南昌],[济南],[青岛],[郑州],[武汉],[长沙],[广州],[深圳],[南宁],[海口],[重庆],[成都],[贵阳],[昆明],[拉萨],[西安],[兰州],[西宁],[银川],[乌鲁木齐])) as U
这里的地区和数值这两个名字可以随便指定。地区 in后面的括号里是要转置的列名。地区是查询结果中所有转换成行的列的列名。数值这个和原表基本上没有什么关系,只是一个列名来存放地区对应的数值。只要保证select后面和unpivot后面一样就OK了。
结果如下图所示:
PS:如果用SQL SERVER 2000的话,可以用UNION ALL来做。比如上面的可以按下面格式来写:
select date as '时间','全国' as '地区',col_1 as '数值'
from asdfg
union all
select date,'北京',col_2 from asdfg
union all
......
select date as '时间','全国' as '地区',col_1 as '数值'
from asdfg
union all
select date,'北京',col_2 from asdfg
union all
......