簡體   English   中英

在SQL中將行轉換為列標題

[英]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中使用UNPIVOTPIVOT函數來轉置行和列,以下查詢應做您想要的事情:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM