日期:2014-05-17  浏览次数:20583 次

sql语句,某一行数据变为列名
我有一个表
   日期       合肥   F3      F4       芜湖   F6      F7
--------------------------------------------------------------------
   NULL       气象   最高    最低     气象   最高    最低
   2013-10    多云   32      20       雨     35      20
   2013-11    晴     30      20       晴     25      20
现在要变为:
   日期           城市    气象    最高     最低
--------------------------------------------------------------
   2013-10        合肥    多云    32        20
   2013-10        芜湖    雨      35        20
   2013-11        合肥    晴      30        20
   2013-11        芜湖    晴      25        20
可以的话尽量写成动态,因为不只两个城市

------解决方案--------------------


select 日期,'合肥' as 城市,合肥 as 气象,F3 as 最高,F4 as 最低
from tb
where 日期 is not null  
union all 
select 日期,'芜湖' as 城市,芜湖 as 气象,F6 as 最高,F7 as 最低
from tb
where 日期 is not null  

------解决方案--------------------
这个是动态生成的语句:



 select 日期,'合肥' as 城市,合肥 as 气象,F3 as 最高,F4 as 最低  
 from tb where 日期 is not null 
 union all 
 select 日期,'芜湖' as 城市,芜湖 as 气象,F6 as 最高,F7 as 最低  
 from tb where 日期 is not null 
 union all 
 select 日期,'北京' as 城市,北京 as 气象,F9 as 最高,F10 as 最低  
 from tb where 日期 is not null 
 union all 
 select 日期,'福州' as 城市,福州 as 气象,F12 as 最高,F13 as 最低  
 from tb where 日期 is not null