0

我如何编写一个 SQL 语句来排列一列序列号,以便它们分组,范围为 1000 或更少(基于它们的序列号)?这些数字当前未排序,但最终会像下面的示例一样。第一个示例组中只有两个数字(相差 31)。第三个数字与第二个数字相差 6443,将其放在单独的分组中 (>1000)。接下来的 4 个数字根据 ...4015 到 ...4865 的范围(差异为 850)进行分组。

我仍然是 TSQL < 6 个月的菜鸟。我什至不知道从哪里开始。

serial_num
----------  
33XG547909  
33XG547940  

33XG554383  

33XG564015 
33XG564282 
33XG564289  
33XG564308  
33XG564314  
33XG564353  
33XG564865  

33XG569023       

34LT242788  
34LT242812  
4

2 回答 2

0

好的,如果我理解正确,您可以尝试类似

SELECT  SerialNumber,
        FLOOR(RIGHT(SerialNumber,6) / 1000) GroupNumber
FROM    YourTable
ORDER BY 2, 1

结果应该是

SerialNumber    GroupNumber
34LT242788      242
34LT242812      242
33XG547909      547
33XG547940      547
33XG554383      554
33XG564015      564
33XG564282      564
33XG564289      564
33XG564308      564
33XG564314      564
33XG564353      564
33XG564865      564
33XG569023      569
于 2012-08-17T05:58:44.973 回答
0

如果您希望以滑动比例对项目进行分组,其中每个项目都可以与最近的一千个项目进行分组,那么您将遇到很多麻烦,因为会有很多组合。除非您正在查看特定项目并试图找到与该项目最接近的一千个,否则它们可能也不会有帮助。

我认为 Astander 有一个很好的解决方案,但它没有涵盖连续剧的开头部分。看起来您的解决方案很简单:

SELECT  SerialNumber,
        LEFT(SerialNumber, LEN(SerialNumber) - 3) GroupNumber
FROM    YourTable
ORDER BY 2, 1

结果是

SerialNumber GroupNumber
------------ -----------
33XG547909   33XG547
33XG547940   33XG547
33XG554383   33XG554
33XG564015   33XG564
33XG564282   33XG564
33XG564289   33XG564
33XG564308   33XG564
33XG564314   33XG564
33XG564353   33XG564
33XG564865   33XG564
33XG569023   33XG569
34LT242788   34LT242
34LT242812   34LT242
于 2012-08-17T20:37:23.870 回答