关于MS SQL中行转列做法

本文介绍如何使用 SQL 的 Pivot 关键字实现数据从行到列的转换,并提供了具体实例。此外,还介绍了如何通过技巧实现动态的行转列查询。

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

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

A B
A11
A22
A33
A44
A55

现在要将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做成一个函数,就可以实现动态的行专列查询了。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值