求助,帮忙看一下这个应该怎么做

[复制链接]
查看11 | 回复6 | 2005-12-25 19:51:16 | 显示全部楼层 |阅读模式
一张表有3个字段:年月、货名、量
200801 a 8
200801 b 6
200801 c 9
200802 a 9
200802 b 8
200802 d 9
200803 a 4
现在需要新求一个字段:用当月的某个货的量-上个月的这个货的量,如果这个货存在,则相减,否则就为当月的量,如:
200801 a 8 .
200801 b 6 .
200801 c 9 .
200802 a 1
200802 b 8 2
200802 d 9 9
200803 a 4 -5
回复

使用道具 举报

千问 | 2005-12-25 19:51:16 | 显示全部楼层
select u.ny,u.hm,u.l,decode(sign(u.l-u.l1),-1,u.l,u.l-u.l1) from (select ny,hm,l,lag(l,1) over(partition by hm order by ny) l1 from c) u
SQL> /
NY HM
L DECODE(SIGN(U.L-U.L1),-1,U.L,U.L-U.L1)
---------- ---------- ---------- --------------------------------------
200801 a
8
200802 a
9
1
200803 a
4
4
200801 b
6
200802 b
8
2
200801 c
9
200802 d
9
已选择7行。
楼主看下对不对
[ 本帖最后由 star_guan2008 于 2008-4-10 09:35 编辑 ]
回复

使用道具 举报

千问 | 2005-12-25 19:51:16 | 显示全部楼层
SELECT t.*,

Nvl(qty-Lag(qty) over (PARTITION BY code ORDER BY dt),qty) AS x
FROM
(
select 200801 as dt, 'a' as code, 8 as qty from dual union all
select 200801 as dt, 'b' as code, 6 as qty from dual union all
select 200801 as dt, 'c' as code, 9 as qty from dual union all
select 200802 as dt, 'a' as code, 9 as qty from dual union all
select 200802 as dt, 'b' as code, 8 as qty from dual union all
select 200802 as dt, 'd' as code, 9 as qty from dual union all
select 200803 as dt, 'a' as code, 4 as qty from dual
) t
/
DT
CODE
QTY
X
200801
a
8
8
200802
a
9
1
200803
a
4
-5
200801
b
6
6
200802
b
8
2
200801
c
9
9
200802
d
9
9
回复

使用道具 举报

千问 | 2005-12-25 19:51:16 | 显示全部楼层



SQL> select * from tmp_11;
DT CODEQTY
---------- ---- ----------
200801 a
8
200801 b
6
200801 c
9
200802 a
9
200802 b
8
200802 d
9
200803 a
4
7 rows selected
SQL>
SQL> select DT,
2 CODE,
3 QTY,
4 QTY - lag(QTY, 1, 0) over(partition by CODE order by DT) NEW_QTY
5from tmp_11
6order by DT, CODE;
DT CODEQTYNEW_QTY
---------- ---- ---------- ----------
200801 a
8
8
200801 b
6
6
200801 c
9
9
200802 a
9
1
200802 b
8
2
200802 d
9
9
200803 a
4 -5
7 rows selected
SQL>

回复

使用道具 举报

千问 | 2005-12-25 19:51:16 | 显示全部楼层
原帖由 bell6248 于 2008-4-10 10:03 发表


SQL> select * from tmp_11;
DT CODEQTY
---------- ---- ----------
200801 a
8
200801 b
6
200801 c
9
200802 a
9
200802 b
8
200802 d
9
200803 a
4
7 rows selected
SQL>
SQL> select DT,
2 CODE,
3 QTY,
4 QTY - lag(QTY, 1, 0) over(partition by CODE order by DT) NEW_QTY
5from tmp_11
6order by DT, CODE;
DT CODEQTYNEW_QTY
---------- ---- ---------- ----------
200801 a
8
8
200801 b
6
6
200801 c
9
9
200802 a
9
1
200802 b
8
2
200802 d
9
9
200803 a
4 -5
7 rows selected
SQL>

如果这条记录没有对不对?
200802 a
9
回复

使用道具 举报

千问 | 2005-12-25 19:51:16 | 显示全部楼层
拿纯sql能做吗?
回复

使用道具 举报

千问 | 2005-12-25 19:51:16 | 显示全部楼层
谢了,楼上的几位
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行