SQL Server行转列的什么情况下被用?


  本文标签:SQL Server行转列

  以下的文章主要描述的是SQL Server行转列在什么情况下可能被应用的道,你如果对其有兴趣的话你就可以点击以下的文章进行观看了,以下的文章将会揭开它的神秘面纱,以下的文章将会揭开它的神秘面纱  。

  有些时候还是要用到SQL Server行转列,比如下面的数据:

  一般的表结构大多会这么设计,通过关联查询就可以得出上面的数据(客运量就随便123了,非常时期以防恐怖分子)

  

  不用说,大家也明白要得到下面的数据:

  列数不多的话一般可以这样,也是网上比较经典的写法

  Select 时间,

  sum(case when 线路=1号线 then客运量 end) As 1号线 ,

  

  sum(case when 线路=2号线 then客运量 end) As 2号线 ,

  

  sum(case when 线路=5号线 then客运量 end) As 5号线 ,

  

  ......

  

  Fromtable Group By 时间

  

  在SQL Server2005里可以用Pivot关键字来操作,如下:

  

  

  1. declare@Strnvarchar(max)  
  2. set@str=select时间 
  3. select@str=@str+,[+线路+]from#Tgroupby线路  
  4. set@str=@str+FROM( 

  

  

  SELECT时间,客运量,线路

  

  FROM#T)AST

  

  PIVOT(sum(客运量)FOR线路IN

  

  (

  

  select@str=@str+[+线路+],from#Tgroupby线路

  

  set@str=left(@str,Len(@str)-1)

  

  set@str=@str+))ASthePivot

  

  ORDERBY时间

  

  declare@T1table(datedatetime,一号线float,二号线float,五号线float,十号线float,十三号线float,八通线float,奥运支线float,机场线float)

  

  1. INSERTINTO@T1exec(@str)  
  2. SELECT*FROM@T1  
  3. droptable#T 

  

  

  SQL Server行转列上面的语句如果运行提示不支持pivot关键字的话(一般SQL2000库导入到SQL2005可能出现这问题),执行下这句:EXEC sp_dbcmptlevel 数据库名称,90

  为了方便看,字段改成中文了,其中#T表的数据就是最上面第一张图的数据(只要基础数据源组织成这样的就行)

  把处理后的数据存放在表变量@T1中(当然临时表也行),因为还要和其他表进行关联,导出一张大表,如下(表的部分列):

  大致就这样吧

  处理的方式应该还有其它的,仅供参考  。