在做报表时,我们经常会遇到行转列的问题,在MS SQL2000时代,一般都是用CASE语句,对数据做离散处理,在SQL 2005里新增了PIVOT关键字,下面用一个例子来说明该关键字的用法。
现在有表TABLEA,表结构以及内容如下
| A | B |
| A1 | 1 |
| A2 | 2 |
| A3 | 3 |
| A4 | 4 |
| A5 | 5 |
现在要将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做成一个函数,就可以实现动态的行专列查询了。
本文介绍如何使用 SQL 的 Pivot 关键字实现数据从行到列的转换,并提供了具体实例。此外,还介绍了如何通过技巧实现动态的行转列查询。
611

被折叠的 条评论
为什么被折叠?



