DECLARE @SubOrder TABLE
(
OrderNum INT NOT NULL,
SubOrder INT NOT NULL,
EmployeeID NVARCHAR(50) NOT NULL,
Revenue NUMERIC(10, 2) NOT NULL
);
INSERT @SubOrder (OrderNum, SubOrder, EmployeeID, Revenue)
SELECT N'0813700' AS [OrderNum], N'1077980' AS [SubOrder], N'CREW' AS [employeeid], N'258.57' AS [revenue] UNION ALL
SELECT N'0935744' AS [OrderNum], N'1257060' AS [SubOrder], N'95LIV' AS [employeeid], N'575.04' AS [revenue] UNION ALL
SELECT N'0935744' AS [OrderNum], N'1342944' AS [SubOrder], N'95LIV' AS [employeeid], N'31.68' AS [revenue] UNION ALL
SELECT N'0935744' AS [OrderNum], N'1257060' AS [SubOrder], N'95NAT' AS [employeeid], N'575.04' AS [revenue] UNION ALL
SELECT N'0935744' AS [OrderNum], N'1342944' AS [SubOrder], N'95NAT' AS [employeeid], N'31.68' AS [revenue];
SELECT pvt.OrderNum,
pvt.TotalRevenue,
pvt.[1] AS Emp1,
pvt.[2] AS Emp2
FROM
(
SELECT dt.OrderNum,
dt.EmployeeID,
DENSE_RANK() OVER(PARTITION BY dt.OrderNum ORDER BY dt.EmployeeID) AS Rnk,
SUM(dt.Revenue) OVER(PARTITION BY dt.OrderNum) AS TotalRevenue
FROM
(
SELECT so.OrderNum,
so.EmployeeID,
ROW_NUMBER() OVER(PARTITION BY so.OrderNum, so.SubOrder ORDER BY @@SPID) AS RowNum,
so.Revenue
FROM @SubOrder so
) dt
WHERE dt.RowNum = 1
) src
PIVOT ( MAX(src.EmployeeID) FOR src.Rnk IN ([1], [2]) ) pvt
结果:
OrderNum TotalRevenue Emp1 Emp2
-------- ------------ ------ -----
813700 258.57 CREW NULL
935744 606.72 95LIV 95NAT
中间结果(...) src:
OrderNum EmployeeID Rnk TotalRevenue
-------- ---------- --- ------------
813700 CREW 1 258.57
935744 95LIV 1 606.72
935744 95NAT 2 606.72
中间结果(...) dt:
OrderNum EmployeeID RowNum Revenue
-------- ---------- ------ -------
813700 CREW 1 258.57
935744 95LIV 1 575.04
935744 95NAT 2 575.04
935744 95NAT 1 31.68
935744 95LIV 2 31.68