2017-10-17 35 views
0

選擇記錄的整理記錄,如果您具有這樣的數據表:的Oracle SQL - 在上面

USER_ID   USERNAME 
    34267    mark 
    15669    john 
    61268    allan 
    87779    mary 

你要選擇這些數據,並對其進行排序均與最低值應該是用戶ID列表頂部。之後,所有其餘記錄將按用戶名字母順序排序。所以這個案例約翰應該先遵循艾倫,然後標記瑪麗。

如何在不使用UNION的情況下做到這一點。這只是一個非常複雜的查詢的一部分,我對每列有多個排序。所以,我不能真正使用這個聯盟。它們是應用該邏輯的第5和第6列順序優先級。

Oracle數據庫版本是12C

+1

'ORDER BY USER_ID DESC,USERNAME' ?? –

+0

在這種情況下,USERNAME的命令從不使用,因爲USER_ID可能是唯一的 – NikNik

+0

@Jaydipj:他希望只有一行以最低的user_id爲先,然後按用戶名排序其餘行。 –

回答

2

您可以使用order by

order by (case when row_number() over (order by user_id) = 1 then 1 else 2 end), -- put minimum user_id on top 
     name asc 
+0

如果我已經按照列之前列出了多個訂單,它也可以工作嗎? (例如,按col1,col2,col3,col4排序(行號......等情況) –

+1

@HingleMcJingleberry是 – MT0

+0

如果您先通過'col1,col2'等命令,然後通過user_id ,那麼你*可能*想爲'col1,col2'等每個固定值設置最低的'user_id'(否則這個問題真的沒有意義)。如果是這樣,那麼** no **,它不會像寫入那樣工作。你必須將分析子句改爲'over(由col1,col2分區,...按user_id排序)' – mathguy

1

您可以添加可用於訂購您記錄的第三列:

select USER_ID, USERNAME, case when USER_ID=(select max(USER_ID) from your_table) 
           then 1 else 2 end as firstOrder 
from your_table 
order by firstOrder asc, USERNAME asc 

所以你會有john作爲第一個記錄,因爲他的firstOrder1,然後您將通過USERNAME訂購。