如有表如下:
单位编号 收入
````````````````````````````````
001 5000
002 6000
003 5600
...
想得到如下:
单位编号 差
````````````````````````````````
001 5000 //头行记录为原值
002 1000 //6000-5000=1000
003 -400 //5600-6000=-400
...
用PL SQL、游标逐行处理可以,现在想用SQL语句实现,该怎么办?
求高手不吝赐教~!谢谢~
9 个解决方案
#1
Oracle8i不熟悉
#2
哦,楼上的高手,如果是在SQL SERVER2000中呢?谢谢~!
#3
用游标啊。
多定义一个参数,记下当前的值,下一行的时候再用当前值减刚才的值啊。
代码方面的参考联机帮助或者看SQL SERVER 技术内幕。应该不会难。
有什么具体的问题再问。
多定义一个参数,记下当前的值,下一行的时候再用当前值减刚才的值啊。
代码方面的参考联机帮助或者看SQL SERVER 技术内幕。应该不会难。
有什么具体的问题再问。
#4
噢,用游标的话我也是晓得的;
难道不能用SQL语句直接写出?
难道不能用SQL语句直接写出?
#5
使用SELECT递归语句撒
#6
表tab的数据
class, price
001 , 5000
002 , 6000
003 , 5600
...
在SQL server 2000中可用下面的方法实现:
select a.class,a.price-isnull(b.price,0) as price from
(select *,class+0 as class1 from tab ) a left join
(select *, class+1 as class1 from tab where class<>( select max(class) from tab)) b
on a.class1=b.class1
得到结果:
class, price
001 , 5000
002 , 1000
003 , -400
...
oracle中我就不清楚了.................:)
class, price
001 , 5000
002 , 6000
003 , 5600
...
在SQL server 2000中可用下面的方法实现:
select a.class,a.price-isnull(b.price,0) as price from
(select *,class+0 as class1 from tab ) a left join
(select *, class+1 as class1 from tab where class<>( select max(class) from tab)) b
on a.class1=b.class1
得到结果:
class, price
001 , 5000
002 , 1000
003 , -400
...
oracle中我就不清楚了.................:)
#7
create table t(
单位编号 char(10),
收入 decimal null
)
insert into t
select '001', 5000
union
select '002', 6000
union
select '003', 5600
select 单位编号,
差 = 收入 - IsNull((select top 1 收入 from t
where cast(单位编号 as int) < cast(a.单位编号 as int) order by cast(单位编号 as int) desc), 0)
from t a
测试结果:
001 5000
002 1000
003 -400
单位编号 char(10),
收入 decimal null
)
insert into t
select '001', 5000
union
select '002', 6000
union
select '003', 5600
select 单位编号,
差 = 收入 - IsNull((select top 1 收入 from t
where cast(单位编号 as int) < cast(a.单位编号 as int) order by cast(单位编号 as int) desc), 0)
from t a
测试结果:
001 5000
002 1000
003 -400
#8
设一个自增字段,根据这个字段做会简单些
#9
ORARichard(没钱的日子......) ( ) 信誉:100 2005-1-21 12:16:50 得分: 0
--try;
select a.单位编号,a.收入-b.收入 差 from
(
select rownum no,单位编号,收入 from tb
) a,
(
select rownum no,单位编号,收入 from (select '000' 单位编号,0 收入 from dual union all
select 单位编号,收入 from tb)
) b
where a.no=b.no;
---------------------------------
在ORACLE的实现,谢谢大家~!
--try;
select a.单位编号,a.收入-b.收入 差 from
(
select rownum no,单位编号,收入 from tb
) a,
(
select rownum no,单位编号,收入 from (select '000' 单位编号,0 收入 from dual union all
select 单位编号,收入 from tb)
) b
where a.no=b.no;
---------------------------------
在ORACLE的实现,谢谢大家~!
#1
Oracle8i不熟悉
#2
哦,楼上的高手,如果是在SQL SERVER2000中呢?谢谢~!
#3
用游标啊。
多定义一个参数,记下当前的值,下一行的时候再用当前值减刚才的值啊。
代码方面的参考联机帮助或者看SQL SERVER 技术内幕。应该不会难。
有什么具体的问题再问。
多定义一个参数,记下当前的值,下一行的时候再用当前值减刚才的值啊。
代码方面的参考联机帮助或者看SQL SERVER 技术内幕。应该不会难。
有什么具体的问题再问。
#4
噢,用游标的话我也是晓得的;
难道不能用SQL语句直接写出?
难道不能用SQL语句直接写出?
#5
使用SELECT递归语句撒
#6
表tab的数据
class, price
001 , 5000
002 , 6000
003 , 5600
...
在SQL server 2000中可用下面的方法实现:
select a.class,a.price-isnull(b.price,0) as price from
(select *,class+0 as class1 from tab ) a left join
(select *, class+1 as class1 from tab where class<>( select max(class) from tab)) b
on a.class1=b.class1
得到结果:
class, price
001 , 5000
002 , 1000
003 , -400
...
oracle中我就不清楚了.................:)
class, price
001 , 5000
002 , 6000
003 , 5600
...
在SQL server 2000中可用下面的方法实现:
select a.class,a.price-isnull(b.price,0) as price from
(select *,class+0 as class1 from tab ) a left join
(select *, class+1 as class1 from tab where class<>( select max(class) from tab)) b
on a.class1=b.class1
得到结果:
class, price
001 , 5000
002 , 1000
003 , -400
...
oracle中我就不清楚了.................:)
#7
create table t(
单位编号 char(10),
收入 decimal null
)
insert into t
select '001', 5000
union
select '002', 6000
union
select '003', 5600
select 单位编号,
差 = 收入 - IsNull((select top 1 收入 from t
where cast(单位编号 as int) < cast(a.单位编号 as int) order by cast(单位编号 as int) desc), 0)
from t a
测试结果:
001 5000
002 1000
003 -400
单位编号 char(10),
收入 decimal null
)
insert into t
select '001', 5000
union
select '002', 6000
union
select '003', 5600
select 单位编号,
差 = 收入 - IsNull((select top 1 收入 from t
where cast(单位编号 as int) < cast(a.单位编号 as int) order by cast(单位编号 as int) desc), 0)
from t a
测试结果:
001 5000
002 1000
003 -400
#8
设一个自增字段,根据这个字段做会简单些
#9
ORARichard(没钱的日子......) ( ) 信誉:100 2005-1-21 12:16:50 得分: 0
--try;
select a.单位编号,a.收入-b.收入 差 from
(
select rownum no,单位编号,收入 from tb
) a,
(
select rownum no,单位编号,收入 from (select '000' 单位编号,0 收入 from dual union all
select 单位编号,收入 from tb)
) b
where a.no=b.no;
---------------------------------
在ORACLE的实现,谢谢大家~!
--try;
select a.单位编号,a.收入-b.收入 差 from
(
select rownum no,单位编号,收入 from tb
) a,
(
select rownum no,单位编号,收入 from (select '000' 单位编号,0 收入 from dual union all
select 单位编号,收入 from tb)
) b
where a.no=b.no;
---------------------------------
在ORACLE的实现,谢谢大家~!