【发布时间】:2018-07-30 06:07:08
【问题描述】:
我在 SQL Server 2012 中获得了一个凌乱的“事实”表,其中 OrderId 和 ProductId 是键。同一个 OrderId 可以有多个 ProductId(最多 5 行)。出于报告目的,我只需为每个 OrderId+ProductId 组合保留一行,使用 5 个字段 Ask、Buy、Rec、Pen、Ret 中的最大值。
我尝试在 ProductId 上使用枢轴运算符,但不知道如何从 5 个不同字段中获取最大值。
样本数据:
DROP TABLE #tmpSO;
CREATE TABLE #tmpSO
(OrderId INT, ProductId INT, Ask INT, Buy INT, Rec INT, Pen INT, Ret INT);
INSERT INTO #tmpSO (OrderId, ProductId, Ask, Buy, Rec, Pen, Ret)
VALUES
(67,1,2,0,0,2,0),
(67,4,30,0,0,30,0),
(67,4,0,30,0,30,0),
(67,6,20,0,0,0,0),
(67,6,0,20,0,0,0),
(67,6,0,0,20,0,0),
(67,9,30,0,0,0,0),
(67,9,0,30,0,0,0),
(67,9,0,0,25,0,0),
(67,9,0,0,0,5,0);
SELECT * FROM #tmpSO;
OrderId ProductId Ask Buy Rec Pen Ret
67 1 2 0 0 2 0
67 4 30 0 0 30 0
67 4 0 30 0 30 0
67 6 20 0 0 0 0
67 6 0 20 0 0 0
67 6 0 0 20 0 0
67 9 30 0 0 0 0
67 9 0 30 0 0 0
67 9 0 0 25 0 0
67 9 0 0 0 5 0
我想要的结果是:
OrderId ProductId Ask Buy Rec Pen Ret
67 1 2 0 0 2 0
67 4 30 30 0 30 0
67 6 20 20 20 0 0
67 9 30 30 25 5 0
请告知使用 Pivot(或其他运算符)是否可行,并提供帮助说明如何使用它。非常感谢。
【问题讨论】:
标签: sql-server pivot