離上次接觸Oracle/SQL已經有好一陣子,當初學習是為了工作需求,後來斷斷續續使用簡單的SQL來完成報表,畢竟工作主要不是當DBA,而是利用Oracle來做資料儲存和統計,藉由SQL與web呈現出來,連半路出家都不算,只能說是略懂皮毛罷了。
不知道誰說過,系統管理要做的好,最後一定得走向資料庫,而我也的確慢慢向資料庫靠近,至少由以前什麼都不會,到現在踏進門口半步啦,這兩天為了開發disk usage monitor system花去不少心神,從environment setup到DB規劃,很多部份不是能不能做,而是怎麼實現比較好!光是數種方法抉擇就很傷腦筋,建系統和蓋房子一樣,地基沒打好,外頭再花俏都沒用,以前寫程式總是沒想太多,能動能跑為先,現在寫程式,事前planning的時間反而增加,方向對了,後續的努力才有意義和效率呀~
說了這麼多,只是想說我那很破的sql今天又學到新東西啦!以往都是簡單循序的select data出來後,轉成hash再去做網頁呈現,而今天學到了case的用法,此法雖然書上看過,但沒經過高人指點,根本不知道可以把直的data提到橫的去擺,明明就是sequential show出的兩個table資料,使用case就可以拉到同一row來放,大大省去許多轉換的code,可以一次把所有的資料select出來,然後時間當X軸,data當Y軸來show data,真是太好用啦!在學會這個方法前,可是得用很多程式來轉換呢~
Ex. Select ID_1,sum(case when ID_A1=’xxx’ then ID_2 else 0 end), sum(case when ID_A2=’yyy’ then ID_3 ekse 0 end),……. Form (select原式) group by ID_1 order by ID_2 DESC
這樣結果會把select原式的結果依ID_1 ID_2 ID_3列出,並以ID_2為準降冪排列
ID_1 ID_2 ID_3
1 5 2
3 4 5
6 3 1
沒有留言:
張貼留言