我在这里看到了类似的示例和解决方案,它们让我走到了这一步(谢谢),但无法弄清楚最后一步。理想情况下,该解决方案对于组合数十万行是有效的。
基本上我有一个价格数据表,每个项目有 1 行或 2 行,每个项目具有不同类型的价格数据 - 价格类型 1 和价格类型 2。我想最终得到一个表格/视图,将 2 个价格组合到一行但保留每个的相对位置,并允许价格 2 数据为空值。
所以如果我有这些数据:
CREATE TABLE Table1 ([Name] varchar(2), [type] char(1), [price] decimal(10,2));
INSERT INTO Table1 ([Name], [type], [price])
VALUES
('a', '1', '1.20'),
('a', '2', '1.25'),
('a1','1', '2.99'),
('b', '1', '2.20'),
('b', '2', '2.25'),
('b1','2', '3.99'),
('c', '1', '3.20'),
('c', '2', '3.25'),
('d', '1', '4.20'),
('d', '2', '4.25');
我可以运行这个 SQL:
select name, [1] price_1, [2] price_2
from
(
select name,
price,
row_number() over (partition by name
order by type asc) rn
from table1
) o
pivot (min(price) for rn in ([1], [2])) p
我得到以下输出,这不太适合我想要的。
NAME PRICE_1 PRICE_2
a 1.2 1.25
a1 2.99 (null)
b 2.2 2.25
b1 3.99 (null)
c 3.2 3.25
d 4.2 4.25
我需要的是 a1 和 b1 行在 price_1 列中具有空值,在 price_2 列中具有价格。