Как добавить уникальный столбец для каждой группы - PullRequest
2 голосов
/ 03 августа 2010

Скажем, у меня есть 2 столбца

Product     Product_Cat
-------     -----------
Cat         0
Dog         0
Potatoes    2
Carrots     2
Laundry     1
Bird        0

Я хочу добавить в 3-й столбец идентификаторов, но хочу, чтобы нумерация была уникальной для Product_Cat, поэтому выходные данные будут выглядеть как

Product     Product_Cat     Cat_Ident
-------     -----------     ---------
Cat         0               1
Dog         0               2
Potatoes    2               1
Carrots     2               2
Laundry     1               1
Bird        0               3

Как ты это делаешь?


Это, конечно, не мои реальные данные, а упрощение того, что я хочу сделать.в моей действующей системе у меня 4585 различных значений «Product_Cat», и они варьируются от 1 до 2408 «Продукты» в категории.

Ответы [ 2 ]

3 голосов
/ 03 августа 2010

Вам необходимо использовать RANK() следующим образом:

CREATE TABLE #Products
(
    ID int IDENTITY(1,1),
    Product nvarchar(8),
    Product_Cat int
)
GO

INSERT INTO #Products (Product, Product_Cat)
VALUES ('Cat', 0)
,('Dog', 0)
,('Potatoes', 2)
,('Carrots', 2)
,('Laundry', 1)
,('Bird', 0)
GO

ALTER TABLE #Products
    ADD Cat_Ident int
GO

UPDATE #Products
    SET Cat_Ident = rankVal
FROM #Products 
    INNER JOIN (
        SELECT ID, RANK () OVER (PARTITION BY Product_Cat ORDER BY ID ) AS rankVal
        FROM #Products ) rankings ON #Products.ID = rankings.ID

SELECT * FROM #Products

DROP TABLE #Products

Результат:

ID          Product  Product_Cat Cat_Ident
----------- -------- ----------- -----------
1           Cat      0           1
2           Dog      0           2
3           Potatoes 2           1
4           Carrots  2           2
5           Laundry  1           1
6           Bird     0           3

(6 row(s) affected)
0 голосов
/ 03 августа 2010

Нам нужна дополнительная информация, но похоже, что вам нужно использовать триггер для формирования значения cat_ident.

Простое SELECT COUNT()+1 GROUP BY ProductCat должно помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...