2015-12-15 35 views
1

排名如何从以下格式的数据透视表:如何透视表,并提供与TSQL

Current Table Structure

以下所需的格式:

Desired Format

这将是非常巨大的帮助,如果有人能帮我解决这个问题

注意:我正在使用SQL Server 2008 R2

+0

这称为[* unpivot *](https://technet.microsoft.com/en-us/library/ms177410(v = sql.105).aspx)。 –

回答

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

这是由于有更多区域经理分数值度量类型。您可以尝试这些ranking functions以找到最适合您的需求排名。