Я видел похожие примеры и решения здесь, которые позволяют мне получить это далеко (спасибо), но не могут понять последний шаг. Идеально решение эффективно для объединения нескольких сотен тысяч строк.Как объединить две строки в одну и разрешить нули
В принципе у меня есть таблица данных о ценах с 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
Что мне нужно для а1 и b1 строк, чтобы иметь нуль в PRICE_1 колонке и цена в price_2 колонке.
Perfect. Спасибо! – Dave
Мне нужно иметь это как вид, который был изменен следующим образом: два получают обе цены, но получают 4 строки для каждого элемента теперь, поскольку полное соединение дает мне 2x2 строки: Выберите coalesce (a.Name, b.Name) Имя, a.Цена as price1, b.price as price2 From table1 a Full Join table1 b On b.name = a.Name – Dave
ahh забыли полное условие присоединения на pricetype, изменили его ... –