Sql server 按在组中创建升序ID

Sql server 按在组中创建升序ID,sql-server,group-by,Sql Server,Group By,我有这张桌子 +-----------+-------------+ | FoodType | Food | +-----------+-------------+ | Fruits | Apple | | Fruits | Orange | | Meat | Beef | | Meat | Chicken | | Meat | Pork | | Vegetable | Cauli

我有这张桌子

+-----------+-------------+
| FoodType  |    Food     |
+-----------+-------------+
| Fruits    | Apple       |
| Fruits    | Orange      |
| Meat      | Beef        |
| Meat      | Chicken     |
| Meat      | Pork        |
| Vegetable | Cauliflower |
| Vegetable | Leek        |
+-----------+-------------+
我希望如何创建一个新列(
GroupID
),该列为按特定顺序(例如,按
FoodType
Food
排序)按FoodType分组的数据生成唯一ID:

+-----------+-------------+---------+
| FoodType  |    Food     | GroupID |
+-----------+-------------+---------+
| Fruits    | Apple       |       1 |
| Fruits    | Orange      |       2 |
| Meat      | Beef        |       1 |
| Meat      | Chicken     |       2 |
| Meat      | Pork        |       3 |
| Vegetable | Cauliflower |       1 |
| Vegetable | Leek        |       2 |
+-----------+-------------+---------+
我有一个简单的疑问:

SELECT  FoodType, Food
FROM    Food
GROUP BY FoodType, Food

但是我不知道如何生成ID。

您需要使用
行编号()
和相应的
分区依据和
顺序依据
子句:

SELECT FoodType, Food, ROW_NUMBER() OVER (PARTITION BY FoodType ORDER BY Food)
FROM Food 

您需要将
ROW_NUMBER()
与相应的
PARTITION BY
ORDER BY
子句一起使用:

SELECT FoodType, Food, ROW_NUMBER() OVER (PARTITION BY FoodType ORDER BY Food)
FROM Food 

谢谢你,我对使用一个CTE@RegularNormalDayGuy如果你想只过滤最小的或最大的,或前三个,或删除除最小的以外的所有内容,那么CTE就变得很有用了。谢谢你,我对使用CTE@RegularNormalDayGuy如果您只想在smal上进行过滤,CTE将变得非常有用最小或最大,或前三个,或删除除最小外的所有,等等。