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将变得非常有用最小或最大,或前三个,或删除除最小外的所有,等等。