Sql server 将列转换为行

Sql server 将列转换为行,sql-server,tsql,pivot,Sql Server,Tsql,Pivot,我有一个表格的结果集,如下图所示: 由以下查询返回: SELECT [id],[siteId],[variableId],[qualifierId],[value],[valueDate],[insertDate],[insertUserID] ,[deleteDate],[deleteUserId],[dataStatus] FROM MyTable SELECT * FROM ( SELECT * FROM @DataSource ) DS PIVOT ( MA

我有一个表格的结果集,如下图所示:

由以下查询返回:

SELECT [id],[siteId],[variableId],[qualifierId],[value],[valueDate],[insertDate],[insertUserID] ,[deleteDate],[deleteUserId],[dataStatus] FROM MyTable
SELECT *
FROM 
(
    SELECT *
    FROM @DataSource
) DS
PIVOT
(
    MAX([Score]) FOR [MatchID] IN ([1], [2], [3])
) PVT;
我想根据另一张图片进行转置:

我试着按照
透视图
样本进行操作,但未能获得结果。这是我的尝试(我没有包括所有列):

但不起作用,因为这是我得到的结果:

错误在哪里?!
谢谢,diego从子查询中删除
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

说明:

假设我有下表:

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 [id],[siteId],[variableId],[qualifierId],[value],[valueDate],[insertDate],[insertUserID] ,[deleteDate],[deleteUserId],[dataStatus] FROM MyTable
SELECT *
FROM 
(
    SELECT *
    FROM @DataSource
) DS
PIVOT
(
    MAX([Score]) FOR [MatchID] IN ([1], [2], [3])
) PVT;
我得到以下结果(与您类似):

该问题是由
RecordID
列“引起”的,因为它是唯一的,并且结果由它分组。因此,要解决此问题,我需要删除它:

SELECT *
FROM 
(
    SELECT [Team]
          ,[MatchID]
          ,[Score]
    FROM @DataSource
) DS
PIVOT
(
    MAX([Score]) FOR [MatchID] IN ([1], [2], [3])
) 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

说明:

假设我有下表:

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 [id],[siteId],[variableId],[qualifierId],[value],[valueDate],[insertDate],[insertUserID] ,[deleteDate],[deleteUserId],[dataStatus] FROM MyTable
SELECT *
FROM 
(
    SELECT *
    FROM @DataSource
) DS
PIVOT
(
    MAX([Score]) FOR [MatchID] IN ([1], [2], [3])
) PVT;
我得到以下结果(与您类似):

该问题是由
RecordID
列“引起”的,因为它是唯一的,并且结果由它分组。因此,要解决此问题,我需要删除它:

SELECT *
FROM 
(
    SELECT [Team]
          ,[MatchID]
          ,[Score]
    FROM @DataSource
) DS
PIVOT
(
    MAX([Score]) FOR [MatchID] IN ([1], [2], [3])
) PVT;
一切正常:


您会遇到什么错误?您好,Mihai,我没有遇到sql错误,但您可以从我问题的第3张图片(刚刚编辑)中看到不同的结果;值不在一行中。您得到了什么错误?您好Mihai,我没有得到sql错误,但是您可以从我问题的第三张图片(刚刚编辑)中看到不同的结果;这些值不在一行中。