在将列中的某些行转换为列标题时,我需要帮助,下面是示例表-第一个是现在的外观,第二个是我希望如何对其进行转换。请需要帮助和想法。
尝试了数据透视代码但不起作用
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
答案 0 :(得分:0)
使用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;
答案 1 :(得分:0)
您可以在SQL Server中使用UNPIVOT
和PIVOT
函数来转置行和列,以下查询应做您想要的事情:
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