【发布时间】:2014-09-11 05:51:30
【问题描述】:
我在使用 SQL Server 2008 R2 的数据透视表查询中遇到计数问题。
示例:
我有一张桌子testrf:
CREATE TABLE testrf
(
cola INTEGER,
colb VARCHAR(10)
)
有一些数据:
INSERT INTO testrf VALUES(1,'x')
INSERT INTO testrf VALUES(1,'x')
INSERT INTO testrf VALUES(2,'x')
INSERT INTO testrf VALUES(3,'y')
INSERT INTO testrf VALUES(4,'y')
INSERT INTO testrf VALUES(5,'c')
INSERT INTO testrf VALUES(6,'c')
INSERT INTO testrf VALUES(7,'c')
INSERT INTO testrf VALUES(8,'d')
INSERT INTO testrf VALUES(3,'y')
INSERT INTO testrf VALUES(12,'M1')
INSERT INTO testrf VALUES(13,'L1')
INSERT INTO testrf VALUES(14,'C2')
看起来像这样:
SELECT * FROM testrf;
cola colb
------------
1 x
1 x
2 x
3 y
4 y
5 c
6 c
7 c
8 d
3 y
12 M1
13 L1
14 C2
我的数据透视表查询:
DECLARE @cols NVARCHAR(MAX)
DECLARE @SQL NVARCHAR(MAX)
SELECT @cols = STUFF ( (SELECT DISTINCT '],[' + v.colb
FROM testrf AS v
FOR XML PATH('')), 1, 2, '') + ']'
SET @SQL = N'SELECT cola,'+ @cols +'
FROM
(SELECT v.cola,v.colb
FROM testrf AS v
GROUP BY v.cola,v.colb
) p
PIVOT
(
count(colb)
FOR colb IN ( '+ @cols + ' )
) AS pvt';
EXEC(@SQL)
获取结果:
cola c C2 d L1 M1 x y
----------------------------------
1 0 0 0 0 0 1 0
2 0 0 0 0 0 1 0
3 0 0 0 0 0 0 1
4 0 0 0 0 0 0 1
5 1 0 0 0 0 0 0
6 1 0 0 0 0 0 0
7 1 0 0 0 0 0 0
8 0 0 1 0 0 0 0
12 0 0 0 0 1 0 0
13 0 0 0 1 0 0 0
14 0 1 0 0 0 0 0
注意:colb=x 出现 2 次,cola=1 和 colb=y 出现 2 次 cola=3。在这里遇到计数问题。
【问题讨论】:
标签: sql sql-server sql-server-2008 tsql pivot