我希望在我的select语句中添加一个循环,并为我的结果指定值1-16。在16之后我希望循环从1开始并分配下一个1-16,等等。我不确定我是否可以在select语句中执行此操作,或者是否应该将这些行逐步插入临时表中。如果可能的话,我宁愿直接在select语句中这样做。结果集可以包含数千条记录。
示例:
RowDescription AssignedID
Result 1 1
Result 2 2
Result 3 3
Result 4 4
Result 5 5
Result 6 6
Result 7 7
Result 8 8
Result 9 9
Result 10 10
Result 11 11
Result 12 12
Result 13 13
Result 14 14
Result 15 15
Result 16 16
Result 17 1
Result 18 2
Result 19 3
Result 20 4
Result 21 5
Result 22 6
Result 23 7
Result 24 8
Result 25 9
Result 26 10
Result 27 11
Result 28 12
Result 29 13
Result 30 14
Result 31 15
Result 32 16
答案 0 :(得分:2)
根据您对问题的描述,您不需要循环,因为您可以使用Row_Number函数和一些数学运算获得所需的一切。在这种情况下,只需使用mod运算符。您在以下脚本中看到的+1和-1符合1到16的要求。 mod函数通常会返回0到15。
Select RowDescription,
(Row_Number() Over (Order BY RowDescription)-1) % 16 + 1 As AssignedId
From YourTableName
答案 1 :(得分:0)
这里有一个我可以用小套装的方法,我说多达一万条记录可以做得很好
选择案例时(从项目[x]中选择计数(*),其中[x] .item_id< items.item_id)< 16然后(从项目[x]中选择count(*) [x] .item_id< items.item_id)+ 1 else((从项目中选择count(*)) [x]其中[x] .item_id< items.item_id)%16)+ 1结束作为计数器,* 来自item_id的商品订购
但肯定会很慢..我建议你的另一个选择应该更有帮助!