上方廣告

2013年12月5日 星期四

SQL正負數排序問題(腦殘文)


今日再寫一個批次匯入的作業,有個需求是當更新時間一樣的時候,要判斷欄位的大小來決定排序的方式,而我想要的排序方式是當正數時遞減排序,當負數的時候遞增排序。先看一下我的資料結構如下圖。


一個如此簡單的數學問題,連國小的小朋友都有辦法解,但我不知道是被資料欄位誤導,還是真的是我腦袋生鏽了,竟然想透過判斷正負數符號的方式來解,真是愚蠢到忘記正負數的大小本來就是相反的。

下面這段語法是我一開始愚蠢的想法,當然order by 排序當然不允許這樣寫,況且想辦法用正負數符號加工出來的語法在效能上一定很差。
order by [更新時間] desc, case when [正/負數]='+' then [數量] desc else [數量] asc end


正當我在想說怎麼調整比較好的時候,我的國小老師突然重我腦袋中跳出來敲我一下,~"~,原來這個根本不是一個該是問題的問題,只要將數量是負數的*-1,排序就會是對的。
order by [更新時間] desc,case when [正/負數]='+' then [數量] else [數量]*-1 end desc


特別記下這個愚蠢的文章來警惕自己要多用腦袋。

P.S:欄位名稱中文,只是為了容易看得懂再寫什麼,不是真的中文命名,就別見怪了。