2013-07-09 31 views
-7

我有以下值SQL查詢與特定的順序按格式

OperationCode OperationDesc OperationOrder 
    Repl  Remove   1 
    R&I   Remove   1 
    Ovrh  Remove   1 
    Refn  Prep   1 
    Repl  Replace   2 
    R&I   Install   2 
    Ovrh  Install   2 
    Refn  Paint   2 

我想編寫一個查詢得到下面的結果順序表。見OperationOrder列

OperationCode OperationDesc OperationOrder 
    Repl   Remove  1 
    Repl   Replace  2 
    R&I    Remove  1 
    R&I    Install  2 
    Ovrh   Remove  1 
    Ovrh   Install  2 
    Refn   Prep  1 
    Refn   Paint  2 

我使用SQL Server 2005的

+0

你要4位在OperationDesc的面前?好吧,這很簡單,但你爲什麼需要這樣做?也許有比你的SQL格式化一個更好的方法(你有什麼輸出這?) – Charleh

+1

你'ORDER BY OperationID'或'ORDER BY操作代碼,OperationOrder'後? –

+1

另外,我可以看到他想'ORDER BY'第一列 –

回答

5

Here is SQLFiddel Demo

下面是示例查詢哪些你可以試試

SELECT * FROM temp 
ORDER BY 
CASE OperationCode 
    WHEN 'Repl' THEN 1 
    WHEN 'R&I' THEN 2 
    WHEN 'Ovrh' THEN 3 
    WHEN 'Refn' THEN 4 
END, OperationOrder 
+0

1爲工作示例 –

2

貌似要使用ORDER BY

SELECT OperationId, OperationCode, OperationDesc, OperationOrder 
FROM YourTable 
ORDER By OperationCode ASC 
0

我想你想

SELECT 
    ROW_NUMBER() OVER (ORDER BY OperationCode, OperationOrder) as OperationId, 
    OperationCode, 
    OperationDesc, 
    OperationOrder 
FROM SomeTable 
ORDER BY OperationCode, OperationOrder 

因爲它看起來像你的OperationId在每個已改變順序結果集,因此,如果您需要的固定順序必須是自動生成的編號

0

「操作代碼」 又名:
REPL < [R &我< Ovrh <雷弗恩

SELECT * 
FROM YourTable 
ORDER By 
    OperationCode = 'Repl' DESC, 
    OperationCode = 'R&I' DESC, 
    OperationCode = 'Ovrh' DESC, 
    OperationCode = 'Refn' DESC 

「操作代碼=‘REPL’」將返回一個0/1,如果你用DESC責令這把, 「REPL」值首先結束一切之後別人。

+0

這是(我的)SQL語法。 @ RJ1990得到了MSSQL的正確工作示例。 –