将列转置为行
Transpose the columns to rows
我有一个 table 的结果集,如下图所示:
由以下查询返回:
SELECT [id],[siteId],[variableId],[qualifierId],[value],[valueDate],[insertDate],[insertUserID] ,[deleteDate],[deleteUserId],[dataStatus] FROM MyTable
我想根据这张图片转置:
我已尝试按照 PIVOT
示例进行操作,但无法获得结果。这是我的尝试(我没有包括所有的列):
SELECT [1281] AS q1, [1282] AS q2, [1283] AS q3, [1284] AS q4, [1285] AS q5, [1286] AS q6, [1287] AS q7, [1288] AS q8, [1289] AS q9
FROM
(
SELECT id, qualifierId, value, insertDate FROM BADMEntries where variableId=1000) p
PIVOT
(
MAX(value)
FOR qualifierId IN
( [1281] , [1282], [1283], [1284], [1285], [1286], [1287], [1288], [1289] )
) AS pvt
但没有成功,因为这是我得到的结果:
哪里出错了?!
谢谢,迭戈
从子查询中删除 id
列,因为即使您没有在 PIVOT
子句中使用它,在最后的 SELECT
语句中它也用于分组:
SELECT [1281] AS q1, [1282] AS q2, [1283] AS q3, [1284] AS q4, [1285] AS q5, [1286] AS q6, [1287] AS q7, [1288] AS q8, [1289] AS q9
FROM
(
SELECT qualifierId, value, insertDate FROM BADMEntries where variableId=1000) p
PIVOT
(
MAX(value)
FOR qualifierId IN
( [1281] , [1282], [1283], [1284], [1285], [1286], [1287], [1288], [1289] )
) AS pvt
解释:
假设我有以下 table:
DECLARE @DataSource TABLE
(
[RecordID] TINYINT
,[Team] VARCHAR(12)
,[MatchID] TINYINT
,[Score] TINYINT
);
INSERT INTO @DataSource ([RecordID], [Team], [MatchID], [Score])
VALUES (1, 'A', 1, 50)
,(2, 'A', 2, 10)
,(3, 'B', 1, 20)
,(4, 'B', 2, 40)
,(5, 'B', 3, 70);
我想通过 [MatchID]
列创建 PIVOT
并编写以下查询:
SELECT *
FROM
(
SELECT *
FROM @DataSource
) DS
PIVOT
(
MAX([Score]) FOR [MatchID] IN ([1], [2], [3])
) PVT;
我得到以下结果(与您相似):
问题出在 "caused" RecordID
列,因为它是唯一的,结果是按它分组的。因此,要解决此问题,我需要将其删除:
SELECT *
FROM
(
SELECT [Team]
,[MatchID]
,[Score]
FROM @DataSource
) DS
PIVOT
(
MAX([Score]) FOR [MatchID] IN ([1], [2], [3])
) PVT;
一切正常:
我有一个 table 的结果集,如下图所示:
由以下查询返回:
SELECT [id],[siteId],[variableId],[qualifierId],[value],[valueDate],[insertDate],[insertUserID] ,[deleteDate],[deleteUserId],[dataStatus] FROM MyTable
我想根据这张图片转置:
我已尝试按照 PIVOT
示例进行操作,但无法获得结果。这是我的尝试(我没有包括所有的列):
SELECT [1281] AS q1, [1282] AS q2, [1283] AS q3, [1284] AS q4, [1285] AS q5, [1286] AS q6, [1287] AS q7, [1288] AS q8, [1289] AS q9
FROM
(
SELECT id, qualifierId, value, insertDate FROM BADMEntries where variableId=1000) p
PIVOT
(
MAX(value)
FOR qualifierId IN
( [1281] , [1282], [1283], [1284], [1285], [1286], [1287], [1288], [1289] )
) AS pvt
但没有成功,因为这是我得到的结果:
哪里出错了?! 谢谢,迭戈
从子查询中删除 id
列,因为即使您没有在 PIVOT
子句中使用它,在最后的 SELECT
语句中它也用于分组:
SELECT [1281] AS q1, [1282] AS q2, [1283] AS q3, [1284] AS q4, [1285] AS q5, [1286] AS q6, [1287] AS q7, [1288] AS q8, [1289] AS q9
FROM
(
SELECT qualifierId, value, insertDate FROM BADMEntries where variableId=1000) p
PIVOT
(
MAX(value)
FOR qualifierId IN
( [1281] , [1282], [1283], [1284], [1285], [1286], [1287], [1288], [1289] )
) AS pvt
解释:
假设我有以下 table:
DECLARE @DataSource TABLE
(
[RecordID] TINYINT
,[Team] VARCHAR(12)
,[MatchID] TINYINT
,[Score] TINYINT
);
INSERT INTO @DataSource ([RecordID], [Team], [MatchID], [Score])
VALUES (1, 'A', 1, 50)
,(2, 'A', 2, 10)
,(3, 'B', 1, 20)
,(4, 'B', 2, 40)
,(5, 'B', 3, 70);
我想通过 [MatchID]
列创建 PIVOT
并编写以下查询:
SELECT *
FROM
(
SELECT *
FROM @DataSource
) DS
PIVOT
(
MAX([Score]) FOR [MatchID] IN ([1], [2], [3])
) PVT;
我得到以下结果(与您相似):
问题出在 "caused" RecordID
列,因为它是唯一的,结果是按它分组的。因此,要解决此问题,我需要将其删除:
SELECT *
FROM
(
SELECT [Team]
,[MatchID]
,[Score]
FROM @DataSource
) DS
PIVOT
(
MAX([Score]) FOR [MatchID] IN ([1], [2], [3])
) PVT;
一切正常: