我有一个看起来像这样的表:
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))
答案 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')
我希望它会对你有所帮助, 祝你好运:)