PALMisLIFE 討論區

搜索
鹹魚爸魅力四射舞蹈教室
查看: 3999|回復: 4
打印 上一主題 下一主題

[求助] SQL語法

[複製鏈接]

293

主題

0

好友

2300

積分

Johnny Joker

  • TA的每日心情
    無聊
    2012-7-5 13:24
  • 簽到天數: 1 天

    連續簽到: 1 天

    [LV.1]初來乍到

    文章
    1910
    跳轉到指定樓層
    1#
    發表於 2005-8-17 16:03 |只看該作者 |倒序瀏覽
    資料表 Table1
    欄位 a1,a2,都是varchar

      a1 a2
    1 100 200
    2 90
    3 200 70
    4 300 120
    5 1200

    目標是:只要a2有數值的,就先以a2排序 (a2無內容的是空字串,非Null)
    當a2排序完後,再以a1排序,結果要像下面這樣

      a1 a2
    3 200 70
    4 300 120
    1 100 200
    2 90
    5 1200

    原本應該是很簡單的,不過不幸的是,這兩個欄位都是varchar
    varchar欄位在 order by 排序下的順序會是
    a2:空字串、空字串、120、200、70
    a1:100、1200、200、300、90

    a1好解決:select * from Table1 order by convert(numeric,a1)
    a2就慘了,空字串不能轉型為數值,會發生error

    想請問,除了改變欄位型態外,還有沒有其他select語法可以達成我要的排序?
    分享淘帖0 分享分享0 收藏收藏0 頂0 踩0

    170

    主題

    0

    好友

    703

    積分

    該用戶從未簽到

    文章
    940
    2#
    發表於 2005-8-17 16:26 |只看該作者

    Re: [求助] SQL語法

    這個看起來好像是MSSQL的!
    用Oracle的話可以用decode判別是不是空字串,把空字串轉成0然後排序。
    回復

    使用道具 舉報

    26

    主題

    0

    好友

    326

    積分

    該用戶從未簽到

    文章
    220
    3#
    發表於 2005-8-17 17:04 |只看該作者

    Re: [求助] SQL語法

    SELECT CAST((CASE WHEN A ='' THEN B ELSE A END) AS INTEGER) C FROM TABLE 1
    ORDER BY C

    B可以設為接近0的integer

    Try to see if this works. Use Case.. When in Cast.
    回復

    使用道具 舉報

    293

    主題

    0

    好友

    2300

    積分

    Johnny Joker

  • TA的每日心情
    無聊
    2012-7-5 13:24
  • 簽到天數: 1 天

    連續簽到: 1 天

    [LV.1]初來乍到

    文章
    1910
    4#
    發表於 2005-8-17 17:25 |只看該作者

    Re: [求助] SQL語法

    Originally posted by jiahorng at 2005-8-17 16:26:
    這個看起來好像是MSSQL的!
    用Oracle的話可以用decode判別是不是空字串,把空字串轉成0然後排序。


    沒錯就是MSSQL

    剛剛跟同事討論出來了,也執行正確無誤
    SELECT * FROM Table1  order by (case when a2='' then 9999999 else convert(numeric,a2) end ),convert(numeric,a1)
    回復

    使用道具 舉報

    293

    主題

    0

    好友

    2300

    積分

    Johnny Joker

  • TA的每日心情
    無聊
    2012-7-5 13:24
  • 簽到天數: 1 天

    連續簽到: 1 天

    [LV.1]初來乍到

    文章
    1910
    5#
    發表於 2005-8-17 17:28 |只看該作者

    Re: [求助] SQL語法

    Originally posted by chengru at 2005-8-17 17:04:
    SELECT CAST((CASE WHEN A ='' THEN B ELSE A END) AS INTEGER) C FROM TABLE 1
    ORDER BY C

    B可以設為接近0的integer

    Try to see if this works. Use Case.. When in Cast.



    感謝chengru指導,這個方法也不錯的樣子,等等也來試一下
    回復

    使用道具 舉報

    您需要登錄後才可以回帖 登錄 | 免費註冊

    與站長聯繫| PALMisLIFE 掌上生活      下載:更快、更棒、更好玩

    GMT+8, 2024-6-12 09:17 , Processed in 0.044887 second(s), 30 queries , Gzip On.

    Powered by Discuz!

    © 2001-2012 Comsenz Inc. style by eisdl

    回頂部