線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1515
推到 Plurk!
推到 Facebook!

如何避免order by 空字串

缺席
homeboy
一般會員


發表:11
回覆:11
積分:4
註冊:2007-11-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-01-29 14:02:18 IP:140.130.xxx.xxx 訂閱
各位先進大家好:
小弟現在有一個mssql的問題想請教各位,我想要最後ORDER BY salary.work_code這個欄位,但因為欄位內有空字串,變成會先空字串後再依續由小到大排列,請問如何避免ORDER BY 到空字串呢?
原來:
salary.work_code aa bb
2 a
3 b
1 4 v
2 5 d
3 6 s

需求:
salary.work_code aa bb
1 4 v
2 5 d
3 6 s
2 a
3 b
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-01-29 14:38:15 IP:61.220.xxx.xxx 訂閱

(SELECT * FROM salary WHERE work_code<>'' ORDER BY salary.work_code)
UNION
(SELECT * FROM salary WHERE work_code='')
在 MySQL 5.0.45 實測可用

------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
homeboy
一般會員


發表:11
回覆:11
積分:4
註冊:2007-11-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-01-29 16:21:03 IP:140.130.xxx.xxx 訂閱
感謝版主回覆,我使用的資料庫是mssql,附上程式碼,請指教,謝謝。

[code sql]
sql.add('select * from salary LEFT OUTER JOIN');
sql.add('humall_mstr ON salary.T_NO = humall_mstr.t_no FULL OUTER JOIN');
sql.add('work_mstr work_mstr_1 ON');
sql.add('salary.work_code = work_mstr_1.work_code FULL OUTER JOIN');
sql.add('work_mstr ON salary.PO_NAME1= work_mstr .work_code');
sql.add('WHERE (humall_mstr.PAYFLAG = ''Y''and salary.m_sum6 <> '''' and salary.dep_no = ''06'')ORDER BY salary.work_code,salary.T_NO');
[/code]
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-01-29 16:48:03 IP:61.220.xxx.xxx 訂閱
小弟是 Fedora 7 + MySQL 5.0.45 + phpMyAdmin
建立測試資料, 把該 SQL 語法貼到 phpMyAdmin 去執行, 結果正常
小弟沒有在用 Delphi 直接連接 MySQL
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-01-29 17:25:51 IP:60.248.xxx.xxx 未訂閱
重點應是把sql替換成pcboy版主的語法吧,有UNION,前後資料結構需一樣,把兩個結果變成一個資料表
SELECT * FROM salary WHERE work_code<>'' ORDER BY salary.work_code
UNION
SELECT * FROM salary WHERE work_code=''
homeboy
一般會員


發表:11
回覆:11
積分:4
註冊:2007-11-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-01-30 09:43:12 IP:140.130.xxx.xxx 訂閱
union的功能是結合兩個資料表,之後再依判斷式去抓出資料表的資料但是我抓取的資料並非要排除掉salary.work_code內為空字串的資料,因為我所需要的只是要將資料抓出排版時將空字串資料的欄位排列再最後,我有試過將order by設定為desc的話由大至小順序的話,空字串欄位就會排列至最後,如此我就必須要修改代碼內之數值。
homeboy
一般會員


發表:11
回覆:11
積分:4
註冊:2007-11-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-01-30 10:01:53 IP:140.130.xxx.xxx 訂閱
我試出來可以了,我把salary.work_code內空字串抓出來之後插入999的數值之後再去排序就可以了,感謝各位先進的指教,謝謝。

[code delphi]
sql.add('select * from salary LEFT OUTER JOIN');
sql.add('humall_mstr ON salary.T_NO = humall_mstr.t_no FULL OUTER JOIN');
sql.add('work_mstr work_mstr_1 ON');
sql.add('salary.work_code = work_mstr_1.work_code FULL OUTER JOIN');
sql.add('work_mstr ON salary.PO_NAME1= work_mstr .work_code');
sql.add('WHERE (humall_mstr.PAYFLAG = ''Y''and salary.m_sum6 <> '''' and salary.dep_no = ''03'')');
sql.add('ORDER BY (case when salary.work_code='''' then ''999'' else convert(numeric,salary.work_code) end ),salary.po_name1,salary.T_NO');

[/code]
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-01-30 12:33:45 IP:61.220.xxx.xxx 訂閱
這樣不行嗎 ?
[code delphi]
sql.add('(SELECT * FROM salary WHERE work_code<>'''' ORDER BY salary.work_code)
UNION
(SELECT * FROM salary WHERE work_code='''')');
[/code]
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
系統時間:2024-05-13 21:53:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!