2012-10-31 49 views
0

我想問你關於這個簡單的ORDER BY(在T-SQL)子句中。我們假設我們在一個表中有這些變量。 (表中有ID,姓名,其它列)T-SQL按空格排序排序

'Peter' 
'' 
'' 
'Anna' 
'Michael' 
'Bert' 
'' 
'' 
'' 

目標是責令其按升序排列,但這樣的空格將跟隨並不會進行這些名稱。 (我知道這聽起來有點不合邏輯,但我需要所有的數據行 - 包括空格 - 表中實際上有更多的列,我不能改變任何東西)。當然,這些字符的代碼在字母表之前,但如何欺騙它來產生這個輸出?

SELECT name FROM table ORDER BY name

'Anna' 
'Bert' 
'Michael' 
'Peter' 
'' 
'' 
'' 
'' 
'' 

謝謝!

回答

1

可以在ORDER BY使用CASE

SELECT 
    name 
FROM 
    dbo.table 
ORDER BY 
    CASE WHEN name IS NULL OR name='' THEN 1 ELSE 0 END ASC 
, name ASC 

此查詢將先被分割各分爲兩組:與名

    1. 沒有名字

    那麼它會先由第一組排序,然後由名稱本身排序。然後它會追加沒有名字的組。

  • +0

    其中SQL版本? 2005+? –

    +1

    @ PaN1C_Showt1Me:[** CASE **](http://msdn.microsoft.com/en-us/library/aa258235(v = sql.80).aspx)已於2000年出現。但是,如果您使用sql-server 2000你應該標籤,因爲很多事情自那時起已經發生了變化。 –