我不確定丟在網頁上的情況. 但如果你要長出空白的紀錄, 應該要有個table去做比對
建一個table, 一個欄位 date, 就只放20090301~20090331, 用它來讓你的資料outer join
資料部分的計算, 我試過select case when else 的語法是ok的
不知你的不適合是指哪方面.
SELECT b, a1, SUM (c) c
FROM (SELECT a,
CASE WHEN (a < '20090301') THEN '20090301' ELSE a END
AS a1,
b,
c
FROM test)
GROUP BY b, a1
CREATE TABLE TEST
(
A VARCHAR2(8 BYTE),
B VARCHAR2(6 BYTE),
C VARCHAR2(10 BYTE)
)
Insert into TEST
(A, B, C)
Values
('20040210', '200903', '100');
Insert into TEST
(A, B, C)
Values
('20081020', '200903', '200');
Insert into TEST
(A, B, C)
Values
('20090301', '200903', '100');
Insert into TEST
(A, B, C)
Values
('20090305', '200903', '100');
Insert into TEST
(A, B, C)
Values
('20060405', '200903', '200');
Insert into TEST
(A, B, C)
Values
('20060304', '200903', '300');
COMMIT;
※ 引述《amoebaer (變形蟲)》之銘言:
: 大家好 目前小弟是剛接觸oracle 想要撈出相同天數的資料加總
: 但目前有個問題是 如果在某個月份以前的資料全歸在當月份的第一天
: ex 我要做三月份每天的統計 但是bill_date的日期有可能是2006年的
: 這樣我就必須把這資料加總在 3月1日這天 其它三月份天數的資料
: 就各自加總各自的日期 ex. 3月2日 3月3日......
: 資料表的格是就像下圖
: bill_date revenue_year total_fee
: -------------------------------------
: 20070210 200903 100
: 20081020 200903 200
: 20090301 200903 100
: 20090305 200903 100
: 20060405 200903 200
: 20060304 200903 300
: .
: .
: 假如我是算200903這月份 但bill_date有可能是20070210 我要把他歸在 20090301
: 所以希望呈現出來的是像下面這樣
: revenue_year date total
: -------------------------------------
: 200903 20090301 900
: 200903 20090302 0
: 200903 20090303 0
: 200903 20090304 0
: 200903 20090305 100
: 請問
: 我需要建另一個table存這些資料嗎 因為原本的table沒有date這欄位
: 因為最後是要撈這些資料出來 在網頁上畫圖 是有建另一個table比較方便嗎?
: 或是cursor直接撈 然後去呈現 因為每天都需要更新 還是有其它比較好的方法呢?
: 今天有用過case when else end 但好像也不太適合 麻煩大家了!!
: 感激不盡!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.250.190.113