1. 程式人生 > >oracle 實現分組結果集整合到一行多列顯示

oracle 實現分組結果集整合到一行多列顯示

剛剛接觸資料庫的真正應用,剛開始有很多困難,在網上找答案也沒有十分靠譜的結果,現在我把自己的經驗總結下來,希望能給廣大小鮮肉一點靈感,不勝榮幸。

比如要實現如下的功能,將表中的資料檢索出來,放入到下列表格的列中。


已知是在一個表中有事前,中,後的三種分類,分別由A,B,C來表示,假設欄位名稱為type.

三個要填充的欄位起名字為,sqfxgs,szfxgs,shfxfs.

下面給大家展示一段程式碼:

type是t1的一個列名稱。

select 
sum(case when type= 'A' then 1 else 0 end) sqfxgs,
      sum(case when type= 'B' then 1 else 0 end) szfxgs,
      sum(case when type= 'C' then 1 else 0 end) shfxgs
from tablename t1,tablename t2 where t1.xxx=t2.xxx
這段程式碼中where起到了一個限制的作用,查詢到的返回的資料。

如果type = A則為 sqfxgs的結果加上一條結果集,因為是使用了求和的函式嘛,剩下的B,C亦是如此。

如果我們要加上‘合計’這一行呢?也就是說要求的所獲得資料的總和。效果如下:


合計這個欄位是你自己在select中進行處理的...使用decode()函式應該就可以實現。

這就要用到一個函式,叫group by rollup(columns),函式的具體使用自行去百度,在這裡要強調的一點事columns不可使用type這個欄位,

因為如果使用了這個欄位group by就要發揮它的作用了,他會為你的資料分類,如果三類type結果集中都有的話,就會返回三行三列的一個數據,

這種資料我們是使用不了的。換一個合適的欄位就可以很完美的解決問題了。

不知道有沒有解決大家的問題呢?