sql server ,oracle 通用:
1. 行转列(PIVOT)
|
CREATE TABLE [StudentScores] ( [UserName] NVARCHAR(20), [Subject] NVARCHAR(30), [Score] FLOAT, )
INSERT INTO [StudentScores] SELECT 'alice', 'chinese', 80 INSERT INTO [StudentScores] SELECT 'alice', 'math', 90 INSERT INTO [StudentScores] SELECT 'alice', 'english', 70 INSERT INTO [StudentScores] SELECT 'alice', 'phy', 85 INSERT INTO [StudentScores] SELECT 'amy', 'chinese', 80 INSERT INTO [StudentScores] SELECT 'amy', 'math', 92 INSERT INTO [StudentScores] SELECT 'amy', 'english', 76 INSERT INTO [StudentScores] SELECT 'amy', 'phy', 88 INSERT INTO [StudentScores] SELECT 'miya', 'chinese', 60 INSERT INTO [StudentScores] SELECT 'miya', 'math', 82 INSERT INTO [StudentScores] SELECT 'miya', 'english', 96 INSERT INTO [StudentScores] SELECT 'miya', 'phy', 78
|
SELECT * FROM [StudentScores] /*source table*/
AS P
PIVOT
(
SUM(Score) FOR
p.Subject IN (chinese,math,english,phy)
) AS T
2. 列转行 (UNPIVOT)
|
CREATE TABLE ProgrectDetail ( ProgrectName NVARCHAR(20), OverseaSupply INT, NativeSupply INT, SouthSupply INT, NorthSupply INT )
INSERT INTO ProgrectDetail SELECT 'A', 100, 200, 50, 50 UNION ALL SELECT 'B', 200, 300, 150, 150 UNION ALL SELECT 'C', 159, 400, 20, 320
|
SELECT P.ProgrectName,P.Supplier,P.SupplyNum
FROM
(
SELECT ProgrectName, OverseaSupply, NativeSupply,
SouthSupply, NorthSupply
FROM ProgrectDetail
)T
UNPIVOT
(
SupplyNum FOR Supplier IN
(OverseaSupply, NativeSupply, SouthSupply, NorthSupply )
) P