关于MS SQL中行转列做法

来源:互联网 发布:网络进货渠道有哪些 编辑:程序博客网 时间:2024/05/16 04:49

在做报表时,我们经常会遇到行转列的问题,在MS SQL2000时代,一般都是用CASE语句,对数据做离散处理,在SQL 2005里新增了PIVOT关键字,下面用一个例子来说明该关键字的用法。

现在有表TABLEA,表结构以及内容如下

ABA11A22A33A44A55

现在要将A列的数据做列头

 

SELECT A1,A2,A3,A4,A5 --此处列出的值将做为列头,必须与下面的条件保持一致

FROM TableA

PIVOT

(

 sum(B) --这里写需要做为统计尺度的字段,可以用SUM,AVG,MAX等计算函数

 FOR A IN ('A1','A2','A3','A4','A5') --这里列出需要作为列头A字段的值

) AS pvt

这样就完成了一个简单的行转列的查询,但是这个查询中的维度列是写死的,如果要维度也是动态的,这需要用到另一个技巧,下面就简单介绍一下:

SELECT STUFF( 

SELECT  

', [' + convert(varchar, s.A) + ']' 

FROM (

SELECT A

FROM TableA) s

FOR XML PATH('')), 1, 1, '' 

)

这段SQL能把表中的字段值合并成一个以逗号相隔得字符串,这样的话我们可以把这段SQL做成一个函数,就可以实现动态的行专列查询了。

 

原创粉丝点击