Вы можете использовать функции UNPIVOT
и PIVOT
в SQL-сервере для транспонирования строк и столбцов. Следующий запрос должен делать то, что вы хотите:
CREATE TABLE #temp (Manager VARCHAR(10),Director VARCHAR(10),ManagerID INT,MetricName VARCHAR(10),Numerator INT,Denominator INT)
INSERT INTO #temp VALUES
('Name1','Name1',1112,'Metric1',24,32),
('Name1','Name1',1112,'Metric2',26,32),
('Name1','Name1',1112,'Metric3',45,56),
('Name2','Name2',1245,'Metric1',78,80),
('Name2','Name2',1245,'Metric2',90,78),
('Name2','Name2',1245,'Metric3',34,36)
SELECT pvt.*
FROM (
SELECT Manager
,Director
,ManagerID
,MetricName+Col AS [MetricName]
,Val
FROM #temp
UNPIVOT (Val FOR Col IN([Numerator],[Denominator]))a )unpiv
PIVOT ( MAX(Val) FOR MetricName IN ([Metric1Numerator],[Metric1Denominator],[Metric2Numerator],[Metric2Denominator],[Metric3Numerator],[Metric3Denominator])) pvt