我正确使用PIVOT吗?

时间:2014-04-03 12:47:47

标签: sql tsql pivot pivot-table

我有一个看起来像这样的表:

Id     Client     Sessions
--------------------------
1      A          34
1      B          23
2      A          20
3      A          45
3      B          20

我希望它看起来像这样:

Id     ClientA    ClientB
-------------------------
1      34         23
2      20         0
3      45         20

我认为这是我应该使用PIVOT的情况,但我不确定如何编写查询。这是在正确的轨道上吗?

SELECT b.Id, 'A' ClientA, 'B' ClientB
FROM
(SELECT a.Id, a.Client, a.Sessions
FROM Table1 a) b
PIVOT
(b.Sessions FOR b.Id in (SELECT b.Id FROM b))

2 个答案:

答案 0 :(得分:1)

试试这个:

select Id,
       [A] as 'ClientA',
       [B] as 'ClientB',
from Table1
pivot
( max(Sessions) for Client in ([A], [B]) ) as pvt
order by Id

您需要围绕Sessions的聚合函数。尝试使用max,avg作为解决方法。

答案 1 :(得分:0)

我想我有解决你的问题的方法,请使用这个脚本:

IF OBJECT_ID('Temp') IS NOT NULL
DROP TABLE Temp

SELECT 
    *
INTO Temp
FROM(
SELECT 1 AS Id, 'A' AS Client, 34 AS [Sessions] UNION ALL
SELECT 1 AS Id, 'B' AS Client, 23 AS [Sessions] UNION ALL
SELECT 2 AS Id, 'A' AS Client, 20 AS [Sessions] UNION ALL
SELECT 3 AS Id, 'A' AS Client, 45 AS [Sessions] UNION ALL
SELECT 3 AS Id, 'B' AS Client, 20 AS [Sessions]
) AS T

DECLARE @Col NVARCHAR(4000) = '';

WITH A AS (SELECT DISTINCT LTRIM(RTRIM(Client)) AS Client FROM Temp)
SELECT @Col =  @Col+',['+'Client'+Client+']'
FROM A

SET @Col = RIGHT(@Col, LEN(@Col)-1)

select @Col





EXEC('SELECT
                 Id
                ,'+@Col+'
        FROM
            (SELECT Id, ''Client''+LTRIM(RTRIM(Client)) [Client], [Sessions]
         FROM Temp) AS TT
    PIVOT (MAX([Sessions])
        FOR Client in('+@Col+')) as pvt')

我希望它会对你有所帮助, 祝你好运:)

相关问题