2015-12-16 3 views

Répondre

-1

Vous pouvez faire une agrégation conditionnelle:

SELECT 
    RegionalManager, 
    ATVScore = MAX(CASE WHEN MeasureName = 'ATVScore' THEN Score END), 
    ABCScore = MAX(CASE WHEN MeasureName = 'ABCScore' THEN Score END), 
    Agg, 
    ATVRank  = MAX(CASE WHEN MeasureName = 'ATVScore' THEN [Rank] END), 
    ABCRank  = MAX(CASE WHEN MeasureName = 'ABCScore' THEN [Rank] END) 
FROM tbl 
GROUP BY 
    RegionalManager, Agg 

Si vous avez des valeurs inconnues pour MeasureName, vous devez le faire dynamiquement:

DECLARE @sql NVARCHAR(MAX) = '' 

SELECT @sql = @sql + 
'SELECT 
    RegionalManager' + CHAR(10) 

SELECT @sql = @sql + 
' , MAX(CASE WHEN MeasureName = ''' + MeasureName + ''' THEN Score END) AS' + QUOTENAME(MeasureName) + CHAR(10) 
FROM(
    SELECT DISTINCT MeasureName FROM tbl 
) t 

SELECT @sql = @sql + 
' , Agg' + CHAR(10) 

SELECT @sql = @sql + 
' , MAX(CASE WHEN MeasureName = ''' + MeasureName + ''' THEN [Rank] END) AS' + QUOTENAME(MeasureName) + CHAR(10) 
FROM(
    SELECT DISTINCT MeasureName FROM tbl 
) t 

SELECT @sql = @sql + 
'FROM tbl 
GROUP BY 
    RegionalManager, Agg' 

EXECUTE sp_executesql @sql 
0

essayer

;with a as (select * , row_number() over (order by (select 1)) r from @t), 

b as (select * , row_number() over (partition by agg,RManager order by r) r1 from a) 

select t.RManager,t.Score,t1.Score,t.Agg,t.Rank,t1.Rank 
from b t join (select * from b where r1=2 ) t1 on t.Agg=t1.Agg and t.RManager=t1.RManager 
where t.r1=1 order by agg desc 

données

declare @t table (RManager char(1),MeasureName varchar(10),Score float,Agg varchar(5), [Rank] int) 
insert into @t (RManager,MeasureName,Score,Agg,[Rank]) 
values('A', 'ATVScore', 0.03, 'WTD', 1), 
('B', 'ATVScore', 0.05, 'WTD', 2), 
('C', 'ATVScore', 0.12, 'WTD', 3), 
('A', 'ATVScore', 34, 'MTD', 2), 
('B','ABCScore', 12 ,'MTD', 3), 
('C', 'ABCScore', 112, 'MTD', 1), 
('A', 'ABCScore', 23, 'WTD', 3), 
('B', 'ABCScore', 34, 'WTD', 2), 
('C', 'ABCScore', 45, 'WTD', 1), 
('A', 'ABCScore', 123 ,'MTD', 1), 
('B', 'ABCScore', 34 ,'MTD', 3), 
('C', 'ABCScore', 45 ,'MTD', 2)