一張表,但是需要根據選擇的月份進行(最近3,6,9,12個月)統計和同比顯示,想問問大神要怎么寫
SELECT rq "月份", ((value - old_sum) / old_sum * 100||'%') "同比",value "總數" from
(
select to_char(y.crjsj,'YYYYMM') as rq,count(1) as value,(select count(1) as value from yw_t_jy y1 where to_char(y1.crjsj,'YYYYMM')>=to_char(add_months(TO_DATE (start, 'YYYYMM'),-12),'YYYYMM') and to_char(y1.crjsj,'YYYYMM')<=to_char(add_months(TO_DATE (end, 'yyyymm'),-12),'YYYYMM') and y1.fxqd=0
group by to_char(y1.crjsj,'YYYYMM')) old_sum from yw_t_jy y where to_char(y.crjsj,'YYYYMM')>=start and to_char(y.crjsj,'YYYYMM')<=end and y.fxqd=0
group by to_char(y.crjsj,'YYYYMM') order by rq
)
這是我寫的,如果只有一個月還能計算,但是多個月就沒辦法弄了,一直提示單個子查詢回傳多個行
uj5u.com熱心網友回復:
樓主,研究一下 lag 和 lead 這兩個函式,比較適合你現在的需求;uj5u.com熱心網友回復:
好的,謝謝,我去看看uj5u.com熱心網友回復:
問題出在這個子查詢上面:select count(1) as value from yw_t_jy y1 where to_char(y1.crjsj,'YYYYMM')>=to_char(add_months(TO_DATE (start, 'YYYYMM'),-12),'YYYYMM') and to_char(y1.crjsj,'YYYYMM')<=to_char(add_months(TO_DATE (end, 'yyyymm'),-12),'YYYYMM') and y1.fxqd=0這里會回傳多個結果集,
group by to_char(y1.crjsj,'YYYYMM')
環比應該可以用add_months(-12)實作
同比應該可以用lag(1)取前一行實作
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/99297.html
標籤:開發
