2016-04-15 85 views
2

實施例的表:ORDER BY與CASE - 多個列

tableId otherValue 
1  4 
2  3 
3  2 
4  1 

我基於所述tableId選擇數據以特定的順序 - 當數值爲1或2,然後返回它,否則返回他人。現在我想根據otherValue添加一個額外的排序參數。

如下所示,只需在CASE,ORDER BY之後添加它將不起作用,因爲使用了WITH TIES

SELECT TOP 1 WITH TIES tableId, otherValue 
FROM exampleTable 
ORDER BY (CASE WHEN tableId IN (1, 2) THEN 1 ELSE 2 END), otherValue 

有沒有比外部查詢更好的方法呢?

+0

我不這麼認爲。如果您使用SQL 2012及更高版本,則可以使用IIF()。它有點乾淨。 – FLICKER

+0

1或2的順序?這意味着您已經通過tableId或otherValue進行了排序 –

回答

0

這樣的事情呢?

select * from exampleTable 
where tableID in (1,2) or 
    not exists(select * from exampleTable where tableID in (1,2)) 
order by othervalue