0

(シリアル番号に基づいて)1000以下の範囲のグループになるようにシリアル番号の列を配置するSQLステートメントを作成するにはどうすればよいですか?番号は現在並べ替えられていませんが、次の例のようになります。最初の例のグループには2つの数字しかありません(31の違いがあります)。3番目の番号は2番目の番号と6443の違いがあり、別のグループ(> 1000)に配置されます。次の4つの数値は、...4015から...4865(850の差分)の範囲に基づいてグループ化されます。

私はまだ6か月未満のTSQLの初心者です。どこから始めたらいいのかわからない。

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

33XG554383  

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

33XG569023       

34LT242788  
34LT242812  
4

2 に答える 2

0

各アイテムを 1000 個の最も近いアイテムとグループ化できるスライド スケールでアイテムをグループ化しようとしている場合、非常に多くの組み合わせが存在するため、多くの問題が発生します。特定のアイテムを見て、その 1 つのアイテムに最も近い 1000 個を見つけようとしている場合を除いて、これらもおそらく役に立たないでしょう。

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 に答える
0

OK、正しく理解できれば、次のようなものを試すことができます

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 に答える