我已经查看过这里已经提出的许多问题,但还没有找到一个我可以适应自己情况的问题。
我目前有一个表格,其中包含用于我已组装的各种网页的下拉列表的值。我正在尝试添加对SMS消息的支持。为此,我在名为SMSID的下拉值表中添加了一列。该值必须是0-999的整数,对于特定的下拉列表而言是唯一的。
因此,例如,我有一个带有多个选项的html选择,我希望每个选项都有一个0到9999的uniqueID,从数据库中加载。
有没有办法使用update语句遍历每条记录并为每个下拉选项添加唯一ID?
即
表示例:
FoodType | ingredients | smsID
Pizza | pepperoni | 003
Pizza | onions | 002
Pizza | mushrooms | 000
Pizza | olives | 001
Sandwich | ham | 000
Sandwich | roast beef | 001
Sandwich | turkey | 002
答案 0 :(得分:2)
CTE更新方法比子查询或自连接快得多
;WITH t(old,new) AS (
SELECT
smsID
,REPLACE(STR(ROW_NUMBER() OVER(PARTITION BY FoodType ORDER BY ingredients)-1,3),' ','0')
FROM MyTable
)
UPDATE t
SET old = new
答案 1 :(得分:1)
如果您使用的是SQL Server 2005或更高版本,则可以使用ROW_NUMBER()对行进行编号。
SELECT FoodType, ingredients,
ROW_NUMBER OVER(PARTITION BY FoodType ORDER BY ingredients) smsID
FROM dropdowns
答案 2 :(得分:1)
http://sqlfiddle.com/#!6/fed58/5/0
UPDATE ft
SET smsID= RIGHT('000' + CONVERT(VARCHAR,Row-1),3)
FROM foodtype ft
inner join (
select
Row_Number() OVER (PARTITION BY FoodType ORDER BY ingredients ASC) [Row],
*
FROM FoodType
) a ON a.FoodType=ft.FoodType AND a.ingredients=ft.ingredients
答案 3 :(得分:0)
这应该这样做:
SELECT FoodType, Ingredients, ROW_NUMBER() OVER (PARTITION BY FoodType ORDER BY FoodType) AS smsID
FROM dbo.Dropdowns