你碰到过这个问题吗!

ltzperson 2004-09-08 01:40:09
我要查询数据库,可数据库里只有3行记录,我要查询出4行记录,
是这样的前3列是数据库里的记录可以直接查出来大家主要看第四列的结果是怎么来的。
--------------
aa|a|100|100| 100(是第四列的)是从本行第3列得来的
--------------
bb|b|50 |150| 150(是本行第四列的)=100(第一行第四列)+50(第二行第三列)
--------------
cc|c|60 |210| 210(是本行第四列的)=150(第二行第四列)+60(是本行的第3列)
--------------

最后那一列数据库里没有,请问可以在SQL里写吗,怎么在SQL里写,还请指教
本人是初学者

...全文
180 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
tw_cshn 2004-09-09
  • 打赏
  • 举报
回复
在ORACLE测试通过
create table AA
(
A VARCHAR2(3),
B VARCHAR2(3),
C VARCHAR2(3)
)
添加数据
insert into AA (A, B, C)
values ('aa', 'bb', 'cc');
insert into AA (A, B, C)
values ('a', 'b', 'c');
insert into AA (A, B, C)
values ('100', '50', '60');
commit;
建立ORACLE函数
create or replace function is_number(s varchar2)
return char
is
isRight char(1);
n number;
begin
isRight:='1';
n:=to_number(s);
return isRight;
exception
when others then
isRight:='0';
return isRight;
end;

最后你要的查询

select a,b,c,1 odr from aa
union
select to_char(max(a)) a,to_char(max(b)+max(a)) b ,to_char(max(c)+max(b)+max(a)) c,999 odr from aa where
is_number(a)='1' and is_number(b)='1' and
is_number(c)='1'
order by odr
lzy6204 2004-09-09
  • 打赏
  • 举报
回复
修改一下xhh_88(三友) ( ) 的代码
SQL SERVER 中执行通过!
select
identity(int,1,1) as fid,field1,field2,field3
into #t1
from
tablename
select
a.fid,a.field1,a.field2,a.field3
(select sum(field3) from #t1 where fid<=a.fid) as field4
from #t1 as a
drop Table #t1
wychero 2004-09-09
  • 打赏
  • 举报
回复
应该不是问题,可以实现。
lzy6204 2004-09-09
  • 打赏
  • 举报
回复
用SQL语句很难实现
在DELPHI里面就很很好实现
guifuli 2004-09-09
  • 打赏
  • 举报
回复
可以,很简单的,先搞个临时表,再进行SELECT就行了。
xhh_88 2004-09-09
  • 打赏
  • 举报
回复
回复人: ltzperson(玩人大帝) ( ) 信誉:100 2004-09-09 09:38:00 得分: 0


xhh_88(三友)
老兄你这个也不行吗,


_______________________-哪个不行,你用的是什么数据库?
SunKinXing 2004-09-09
  • 打赏
  • 举报
回复
这个我做过

最笨简单的方法,是把数据库循环一遍的
用个变量,记录上一条的值,加上本条的需要加的字段值
给另个字段就可以啦


iBear 2004-09-09
  • 打赏
  • 举报
回复
也许一个可行的办法,

用一个存储过程,在其中创建一个临时表,把你需要的数据填进去,然后把结果返回到客户端。也许可以写一个查询搞定的,不过哥们没这个水平,存储过程的办法倒可以应付一些复杂的数据处理
ltzperson 2004-09-09
  • 打赏
  • 举报
回复
xhh_88(三友)
老兄你这个也不行吗,
xhh_88 2004-09-08
  • 打赏
  • 举报
回复
有个错误"

2:如果没有序号

select identity(1,1) as fid,... into #t1 from tablename --产生一个序号列也可以

--------------------------------------------
序号列(fid)的值必须具有唯一性,不然"fid>=a.fid"就会有错误的
ltzperson 2004-09-08
  • 打赏
  • 举报
回复
xhh_88(三友)
把第三列排序按照第三列也可以吧
ltzperson 2004-09-08
  • 打赏
  • 举报
回复
看出来的,我试试,
刚才没看完,
知道a是什么了
ltzperson 2004-09-08
  • 打赏
  • 举报
回复
好象不行,
fid>=a.fid) as field4
a是什么
你这是查出一个结果吧,不是每行都有一个对吗
xhh_88 2004-09-08
  • 打赏
  • 举报
回复
实现起来不是很难!

1:如果有序号(或能够唯一排序的字段<这句很难理解;(>)

select fid,field1,field2,field3,(select sum(field3) from tablename where fid>=a.fid) as field4
from tablename as a

2:如果没有序号

select identity(1,1) as fid,... from tablename into #t1 --产生一个序号列也可以
ltzperson 2004-09-08
  • 打赏
  • 举报
回复
还有吗?
liufuyahong 2004-09-08
  • 打赏
  • 举报
回复
--------------
aa|a|100|100| 100(是第四列的)是从本行第3列得来的
--------------
bb|b|50 |150| 150(是本行第四列的)=100(第一行第四列)+50(第二行第三列)
--------------
cc|c|60 |210| 210(是本行第四列的)=150(第二行第四列)+60(是本行的第3列)

SQL Server代码:

create table t
(
col_1 varchar(2),col_2 varchar(1),col_3 int
)

ceate procedure get4Col
as
begin
create table #temp
(
col_1 varchar(2),col_2 varchar(1),col_3 int,col_4 int
)

declare @tmp int
insert into #temp(col_1,col_2,col_3) select * from t

set @tmp=0
update #temp
set @tmp=@tmp+col_3,
col_4=@tmp

select * from #temp
drop table #temp
end

exec get4Col

drop table t
drop procedure get4Col

没调试,应该可以,或者用函数
chengchong1979 2004-09-08
  • 打赏
  • 举报
回复
你叫(玩人大帝) ,不会是连问问题也耍人吧
楚人无衣 2004-09-08
  • 打赏
  • 举报
回复
我想用简单SQL不能实现
chengchong1979 2004-09-08
  • 打赏
  • 举报
回复
没法做
iBear 2004-09-08
  • 打赏
  • 举报
回复
当初为什么不把表设计成四个字段呢?麻烦
加载更多回复(1)

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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