如何透视表并提供TSQL排名

时间:2015-12-15 07:14:49

标签: sql-server pivot unpivot data-manipulation cross-join

如何从以下格式转移表:

Current Table Structure

采用以下所需格式:

Desired Format

如果有人可以帮我解决这个问题,那将是非常好的帮助

注意:我使用的是SQL Server 2008 R2

1 个答案:

答案 0 :(得分:1)

请尝试以下语句:

DECLARE @DataSource TABLE
(
    [RegionalManager] CHAR(1)
   ,[ATVScore] SMALLINT
   ,[BTVScore] SMALLINT
   ,[CTVScore] SMALLINT
   ,[DTVScore] SMALLINT
);

INSERT INTO @DataSource ([RegionalManager], [ATVScore], [BTVScore], [CTVScore], [DTVScore])
VALUES ('A', 75, 56, 34, 567)
      ,('B', 36, 678, 5, 36)
      ,('C', 61, 67, 56, 61)
      --,('A', 71, 71, 71, 71)
      --,('B', 36, 36, 36, 36)
      --,('C', 61, 61, 61, 61)
      --,('A', 71, 71, 71, 71)
      --,('B', 36, 36, 36, 36)
      --,('C', 61, 61, 61, 61);

SELECT UNPVT.[RegionalManager]
      ,UNPVT.[MeasureName]
      ,UNPVT.[Score]
      ,ROW_NUMBER() OVER (PARTITION BY UNPVT.[MeasureName] ORDER BY UNPVT.[Score] DESC) AS [Rank]
FROM @DataSource
UNPIVOT
(
    [Score] FOR [MeasureName] IN ([ATVScore], [BTVScore], [CTVScore], [DTVScore])
) UNPVT
ORDER BY UNPVT.[MeasureName] 
        ,UNPVT.[RegionalManager];

enter image description here

注意,如果您取消注释将值插入@DataSource表,您将得到如下内容:

enter image description here

这是由ATVScore度量类型的更多区域管理者得分值引起的。您可以尝试使用这些ranking functions找到最适合您需求的排名。