我正在努力解決「羣島和差距」問題。這是針對SQL Server 2008/2012(我們兩個都有數據庫)。SQL Server:羣島和差距
我有一個表跟蹤「可用」串行 - #的通道出口;即巴士通行證,入場券,迪斯尼樂園門票等。這些序列號是VARCHAR
,可以是數字和字符的任意組合......任何長度,直到定義列的最大值......其中是VARCHAR(30)
。而這正是我非常努力地處理VIEW的語法/設計的地方。
表(IM_SER
),它包含所有的這些數據都有一個主鍵包括:
ITEM_NO...VARCHAR(20),
SERIAL_NO...VARCHAR(30)
在許多情況下尤其...與不同類型的的「總線傳遞」涉及那些Serial-#可以很容易地跟蹤千位數。需要什麼......是SQL Server中的一個簡單視圖...它只輸出可用序列的連續範圍 - #...直到找到GAP(即序列中的BREAK)。例如,假設我們有以下系列 - 手#的,對於給定本期特價貨品#:
123
124
125
139
140
ABC123
ABC124
ABC126
XYZ240003
XYY240004
在我上面的例子中,輸出將顯示如下:
123 -to- 125
139 -to- 140
ABC123 -to- ABC124
ABC126 -to- ABC126
XYZ240003 to XYZ240004
總共有10個串行 - #... ...但由於我們輸出連續範圍 ...只需要5行輸出。這有意義嗎?請讓我知道...並再次感謝您!...馬克
序列號的不同格式將是一個位的問題。在你的例子中,你會如何處理ABC1244? – TheMadDBA
你可以將你的號碼分成2部分,字符串部分(空,ABC或XYZ)+然後數字?這樣你可以單獨處理這些字段,併爲該數字進行所需的間隔和孤島計算。 –
嗨TheMadDBA。如果我們有一個記錄,考慮到上面的例子,使用「ABCD1244」,那麼我們必須有六行輸出,因爲你會是正確的,因爲它不會落入一個連續的範圍。 嗨JamesZ。我沒有任何線索如何做到這一點。這就是爲什麼我需要語法幫助:-)謝謝!Mark – user3411749