Транспонирование строк в заголовки столбцов в SQL - PullRequest
0 голосов
/ 02 июля 2019

Мне нужна помощь по переносу некоторых строк в столбце в заголовки столбцов ниже, это примеры таблиц - первая - это то, как она выглядит сейчас, а вторая - как я хочу, чтобы она была транспонирована. Нужна помощь и идеи, пожалуйста.

Пробный код Pivot, но не работает

Manager Director ManagerID  MetricName   Numerator Denominator
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

Нужно это в этом формате

Manager Director ManagerID Metric1Numerator Metric1Denminator Metric3Num
Name1    Name1    1112      24            32        26
Name2    Name2    1245      78            90        90

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Вы можете использовать функции 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
0 голосов
/ 02 июля 2019

Используйте PIVOT и UNPIVOT для преобразования строк в столбцы и наоборот.

Попробуйте: -

SELECT * FROM 
(SELECT manager, director, managerID,  metricname, numerator
FROM <your_table>) 
PIVOT (SUM(numerator) as nmt FOR (metricname) IN( 'Metric1', 'Metric2', 'Metric3')) 
ORDER BY manager;
...