2014-07-22 46 views
0

這裏是我的表問題排序由第一個字母列空白列

|users| 
    |id| |lastname1| |lastname2| |name| |company_name| 
    1  Messi   Ramirez  Lionel  
    2  Gates   Bush   Bill   
    3  Klose   Kazer  Miroslav  
    4  Ozil   Demon  Mezut  
    5            Facebook 
    6            GMAIL 
    7            MYSPACE 
    8            Twitter 

我想訂購COMPANY_NAME像lastname1。

有些朋友給了我這個code但並不只具有NULL值空值工作:

select * from users 
order by COALESCE(lastname1,company_name),lastname2,name ASC; 

我應該有這個答案

注:「臉譜」的第一個字母爲F, 「蓋茨」是G,所以它繼續下一封信。

5            Facebook 
    2  Gates   Bush   Bill   
    6            GMAIL 
    3  Klose   Kazer  Miroslav  
    1  Messi   Ramirez  Lionel  
    7            MYSPACE 
    4  Ozil   Demon  Mezut  
    8            Twitter 

請有人可以幫助我嗎?

回答

1

使用coalesce()

order by coalesce(lastname1, company_name) 

我不知道什麼其他列有助於order by所以我刪除它們。

編輯:

如果值是空白或空格,而不是NULL,則使用case

select * from users 
order by COALESCE(lastname1,company_name),lastname2,name ASC; 

COALESCE採取:

order by (case when trim(lastname1) = '' or lastname1 is null then company_name 
       else lastname1 
      end) 
+0

工作不使用空值。 –

+0

感謝它爲我工作,你也應該改變公司名稱「公司名稱」 –

1

您可以用此查詢做到這一點它的列表中第一個非null元素。

DEMO

如果如修改的問題,空字符串同樣應考慮爲NULL,那麼你可以做到這一點與

select * from users 
order by 
CASE 
    WHEN TRIM(lastname1) = '' THEN company_name 
    WHEN lastname1 IS NULL THEN company_name 
    ELSE lastname1 
END; 

Demo

+0

好好似乎與NULL值工作,但不工作,如果是這樣的空白http://sqlfiddle.com/#!2/79964/ 1 –

+0

這是一個新的要求... – VMai

+0

好吧,我編輯了信息 –