2014-05-12 51 views
0

我在甲骨文的SQL方言如下表(被稱爲有一些Java代碼)SQL命令通過複雜的排序

Part # | Locker # | Serial # | Description 
    1   1   1  Alpha 
    1   1   1  Beta 
    1   1   1  Gamma 
    2   1   15  Alpha 
    2   7   17  Gamma 
    2   7   21  Beta 

我正在尋找一種方式做如下排序:

集團的一部分,locker,serial#在一起並按照升序或降序排列描述,同時確保每個組的第一條記錄也按照升序或降序正確排序(衝突應按照期望的順序排列,串行)。因此,例如:

排序DESC會產生:

Part # | Locker # | Serial # | Description 
    2   7   17  Gamma 

    1   1   1  Gamma 
    1   1   1  Beta 
    1   1   1  Alpha 

    2   7   21  Beta 

    2   1   15  Alpha 

我怎樣才能實現這個複雜類型排序的?它甚至可能只是一個查詢?

+0

什麼SQL方言? –

+0

你使用了哪個數據庫?我不明白爲什麼2 7 17 Gamma是第一排。 –

回答

1

有趣的挑戰,需要由3個字段進行分組,並選擇組的最高描述,保持在排序查詢....好!

我已經去了,在MS-SQL 2008中可以看到http://sqlfiddle.com/#!3/422d2/10 MS T-SQL排名函數可能有一個更簡單的方法,但是這個派生的表組應該很容易實現的SQL。

這似乎給你需要的排序順序:

SELECT 
    p1.*, Groups.GMaxDescr 
FROM Parts p1 INNER JOIN 
    (SELECT 
    p2.Part AS GPart, 
    p2.Locker AS GLocker, 
    p2.Serial AS GSerial, 
    Max(p2.Descr) as GMaxDescr 
    FROM Parts p2 
    GROUP BY Part, Locker, Serial 
) AS Groups -- derived table of Groups with First (Max() for DESC) Name 
     -- join original rows with the Groups data for sorting 
     ON p1.Part = Groups.GPart 
     AND p1.Locker=Groups.GLocker 
     AND p1.Serial=Groups.GSerial 
ORDER BY Groups.GMaxDescr DESC, 
     Part DESC, 
     Locker DESC, 
     Serial DESC 
+0

謝謝!這工作很好! – Evilsithgirl