sql server 生成透视表
---恢复内容开始---
实例:
| empid | custid | qty |
| 2 | A | 52 |
| 3 | A | 20 |
| 1 | B | 20 |
| 2 | B | 27 |
| 1 | C | 34 |
| 3 | C | 22 |
| 3 | D | 30 |
要求转换后的透视图如下:
| empid | A | B | C | D |
| 1 | NULL | 20 | 34 | NULL |
| 2 | 52 | 27 | NULL | NULL |
| 3 | 20 | NULL | 22 | 30 |
1.标准sql 进行透视转换
select empid,
sum(case when custid ='A' then qty End) AS A,
sum(case when custid ='B' then qty End) AS B,
sum(case when custid ='C' then qty End) AS C,
sum(case when custid ='D' then qty End) AS D
from dbo.Orders
Group by empid;
2. 使用T-sql 特定的Pivot运算符
select empid, A, B, C, D
From (Select empid, custid, qty
from dbo.Orders)AS D
Pivot(Sum(qty) for custid, A, B, C, D)) As P;
3. 拼接sql 语句
declare @str varchar(200);
set @str = 'select [empid], '
select @str = @str + 'sum(case custid when '+quotename(custid,'''')+' then qty else 0 end) as '+quotename(custid)+',' from dbo.Orders group by custid
select @str = left(@str, len(@str)-1)
select @str = @str + ' from dbo.Orders group by [empid]'
exec(@str)
参考文献:
1. Microsoft sql server 2008技术内幕: T-sql语言基础
2. http://www.cnblogs.com/shangfc/archive/2010/09/14/1826307.html
浙公网安备 33010602011771号