[英]Transposing Rows to Column Headings In SQL
我需要將列中的某些行轉換為下面的列標題的示例表-第一個是現在的外觀,第二個是我希望其被轉換的方式。 需要幫助和想法。
嘗試過樞軸代碼,但無法正常工作
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
使用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;
您可以在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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.