2017-01-23 186 views
0

我有一個表中的位置列表。第一個位置從'2'開始並在'8'完成,第二個位置從字母'A'開始並以'P'結束。最後,每個位置有七個元素,比如這個例子:按組值排序

SELECT Location FROM WAREHOUSE_LOCATIONS 

Location | 
---------| 
2A-1  | 
2A-2  | 
2A-3  | 
2A-4  | 
2A-5  | 
2A-6  | 
2A-7  | 
2B-1  | 
2B-2  | 
2B-3  | 
2B-4  | 
2B-5  | 
2B-6  | 
2B-7  | 
2C-1  | 
... 
3A-1  | 
... 
4A-1  | 
... 
etc... 

我想訂購這樣的這樣的位置:

Location | 
---------| 
2A-1  | 
2B-1  | 
2C-1  | 
2D-1  | 
.... 
2P-1  | 
2A-2  | 
2B-2  | 
2C-2  | 
... 
2P-2  | 
2A-3  | 
2B-3  | 
2C-3  | 

我怎樣才能做到這一點?

+0

如果我讀這正確,你基本上是隨便找3個數據點爲單精度值。你面臨的問題是因爲這違反了1NF。那應該是三列信息。如果需要這種類型的格式可以是一個計算列。 –

+0

謝謝,我認爲你是可靠的。我相信這是可行的,但我必須以另一種方式來做到這一點。 – Jprada

回答

3

你可以這樣做:

ORDER BY CAST(RIGHT(Location, LEN(Location) - CHARINDEX('-', Location)) AS INT), 
LEFT(Location, CHARINDEX('-', Location) - 1) 
+2

我會在連字符後面的部分中將'CAST'放入'INT'中,否則'10'會在「2」之前排序。 –

+0

好主意。謝謝。 –

+0

我寫了這個聲明,因爲我正在跑出門,所以它可能需要一點點調整。我現在不是可以在這裏工作的地方。你能粘貼實際的錯誤文本嗎? –