在 Oracle PL/SQL 中,
要實現不同筆資料, 在同一列顯示這需求,
最常見的就是前後期數字比較,
除了 SYS_CONNECT_BY_PATH 之外,
還可以利用 UNION ALL 與 Group By 來完成, 如下 :
範例程式碼
-- 建立暫存 Table create table tomkuo1( code varchar2(10) -- 代碼 , name varchar2(30) -- 名稱 , tra_date varchar2(6) -- 交易年月 , amount number -- 交易金額 ); -- 建立暫存 Data insert into tomkuo1 values( 'a', 'aaa', '201011', 10000 ); -- 前期 insert into tomkuo1 values( 'a', 'aaa', '201011', 15000 ); insert into tomkuo1 values( 'a', 'aaa', '201012', 16000 ); -- 本期 insert into tomkuo1 values( 'a', 'aaa', '201012', 20000 ); insert into tomkuo1 values( 'b', 'bbb', '201011', 20000 ); -- 前期 insert into tomkuo1 values( 'b', 'bbb', '201011', 23000 ); insert into tomkuo1 values( 'b', 'bbb', '201012', 45000 ); -- 本期 insert into tomkuo1 values( 'c', 'ccc', '201011', 50000 ); -- 前期 insert into tomkuo1 values( 'c', 'ccc', '201012', 28000 ); -- 本期 insert into tomkuo1 values( 'c', 'ccc', '201012', 32000 ); insert into tomkuo1 values( 'd', 'ddd', '201011', 40000 ); -- 前期 insert into tomkuo1 values( 'd', 'ddd', '201012', 50000 ); -- 本期 commit; -- 同時取得本期(201012) 與前期(201011) 的資料 select a.code , a.name , sum(a.amount1) 本期金額 , sum(a.amount2) 前期金額 from (-- 本期 select code , name , sum(amount) amount1 , 0 amount2 from tomkuo1 where tra_date = '201012' group by code, name union all -- 前期 select code , name , 0 amount1 , sum(amount) amount2 from tomkuo1 where tra_date = '201011' group by code, name ) a group by a.code, a.name order by a.code, a.name; -- 結果顯示 CODE NAME 本期金額 前期金額 ---- ---- ------- -------- a aaa 36000 25000 b bbb 45000 43000 c ccc 60000 50000 d ddd 50000 40000
參考看看囉 ^^.