请教一个增长率的SQL,谢谢

520NET 2011-10-21 09:26:23
SELECT T.FEE_MONTH,
T.MI_CODE,
SUM(NVL(T.AMNT, 0)) AMNT, /*费用*/
SUM(NVL(T.TIMES, 0)) TIMES, /*人次*/
SUM(NVL(T.PCOUNT, 0)) PCOUNT /*人数*/
FROM M_ZF_INSTFEE_MSTAT T
WHERE T.PSNTYPE = '1' /*城镇居民*/
AND T.FEE_MONTH BETWEEN '201012' AND '201112'
AND (T.MI_CODE = '00000004' OR T.MI_CODE = '05110004')
GROUP BY T.MI_CODE, T.FEE_MONTH
显示结果如下:
FEE_MONTH MI_CODE AMNT TIMES PCOUNT
1 201012 00000004 0 0 0
2 201012 05110004 0 0 0
3 201101 00000004 20326 5 5
4 201101 05110004 3328 1 1
5 201102 00000004 2503 2 2
6 201102 05110004 0 0 0
7 201103 00000004 3672 1 1
8 201103 05110004 0 0 0
9 201104 00000004 0 0 0
10 201104 05110004 0 0 0
11 201105 00000004 0 0 0
12 201105 05110004 0 0 0
我想得到如下结果,请教SQL,谢谢!
FEE_MONTH MI_CODE AMNT TIMES PCOUNT PRE_AMNT(上一月份的金额)
1 201012 00000004 0 0 0 0
2 201012 05110004 0 0 0 0
3 201101 00000004 20326 5 5 0
4 201101 05110004 3328 1 1 0
5 201102 00000004 2503 2 2 20326
6 201102 05110004 0 0 0 3328
7 201103 00000004 3672 1 1 2503
8 201103 05110004 0 0 0 0
9 201104 00000004 0 0 0 3672
10 201104 05110004 0 0 0 0
11 201105 00000004 0 0 0 0
12 201105 05110004 0 0 0 0
...全文
112 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
funfenffun 2011-10-21
  • 打赏
  • 举报
回复
好吧,我看花掉了,您老只是建了一个例子的临时表,没睡醒的说
opps_zhou 2011-10-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 funfenffun 的回复:]

引用 2 楼 opps_zhou 的回复:

给你写一个简单的示例

SQL code

with tbl as
(
select '201101' as sdate, '001' as id, 11 as price from dual
union all
select '201101' as sdate, '002' as id, 12 as price from dua……
[/Quote]

你先弄清楚 with 的用法是干嘛的先
funfenffun 2011-10-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 opps_zhou 的回复:]

给你写一个简单的示例

SQL code

with tbl as
(
select '201101' as sdate, '001' as id, 11 as price from dual
union all
select '201101' as sdate, '002' as id, 12 as price from dual
union all
……
[/Quote]

那岂不是说我要输出100条记录,那我就要在tb1中写100条select语句了,这肯定不行
opps_zhou 2011-10-21
  • 打赏
  • 举报
回复
给你写一个简单的示例


with tbl as
(
select '201101' as sdate, '001' as id, 11 as price from dual
union all
select '201101' as sdate, '002' as id, 12 as price from dual
union all
select '201102' as sdate, '001' as id, 21 as price from dual
union all
select '201102' as sdate, '002' as id, 22 as price from dual
)
select sdate, id, price, nvl(lag(price) over(partition by id order by sdate), 0) as last_price
from tbl
order by sdate, id;


SDATE ID PRICE LAST_PRICE
------ --- ---------- ----------
201101 001 11 0
201101 002 12 0
201102 001 21 11
201102 002 22 12
opps_zhou 2011-10-21
  • 打赏
  • 举报
回复
求上一个月用 lag(金额字段) over(order by 日期字段)

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧