Каждая строка в моей таблице указывает продукт и страну, в которой он был куплен. Так:
Product 1, Country A
Product 1, Country B
Product 1, Country C
Product 2, Country A
Product 2, Country B
Я хочу добавить еще один столбец, который в основном подсчитывает каждую страну по продукту. Каждый раз, начиная с одного для нового продукта.
Product 1, Country A, Country 1
Product 1, Country B, Country 2
Product 1, Country C, Country 3
Product 2, Country A, Country 1
Product 2, Country B, Country 2
В прошлом это делалось в скрипте vba, просто запуская цикл, сравнивающий название продукта с названием продукта из предыдущей строки, добавляя +1, если оно совпадает, и 1, если это не так. Мне было интересно, есть ли способ добиться этого с помощью SQL.
использовать row_number()
select *, row_number() over(partition by product order by country) as rn
from tablename
CREATE TABLE #Table1
([col1] varchar(9), [col2] varchar(9))
;
INSERT INTO #Table1
([col1], [col2])
VALUES
('Product 1', 'Country A'),
('Product 1', 'Country B'),
('Product 1', 'Country C'),
('Product 2', 'Country A'),
('Product 2', 'Country B')
;
select *, concat('Country',' ',row_number() over(partition by [col1] order by [col1])) as rn_column
from #Table1
выход
col1 col2 rn_column
Product 1 Country A Country1
Product 1 Country B Country2
Product 1 Country C Country3
Product 2 Country A Country1
Product 2 Country B Country2