循环选择语句并指定ID 1-16

时间:2013-12-17 15:07:48

标签: tsql loops

我希望在我的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

2 个答案:

答案 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的商品订购

但肯定会很慢..我建议你的另一个选择应该更有帮助!