永发信息网

SQL 行累计

答案:3  悬赏:80  手机版
解决时间 2021-01-28 13:29
  • 提问者网友:蓝莓格格巫
  • 2021-01-28 05:32
表A
列A 列B
100 50
80 40
200 100

希望得到查询出如下数据
列X为上行的X累加本行的A-B的余数
列A 列B 列X
100 50 50
80 40 90
200 100 190

create table t(a varchar,b int,x int,y int)
insert into t values('a','1','10','7')
insert into t values('b','1','12','6')
insert into t values('a','2','10','5')
insert into t values('b','2','10','4')
insert into t values('a','3','10','3')
insert into t values('c','1','10','2')
insert into t values('1','1','10','1')
select *,z=(select SUM(x-y) from t where t.b<=tt.b) from t
这样的结果不能满足要求,还需要更具a列分组
select *,z=(select SUM(x-y) from t where t.b<=tt.b group by a) from t tt
报错(子查询返回的值不止
请告诉我报错的原因,及正确的SQL,谢谢!
最佳答案
  • 五星知识达人网友:风格不统一
  • 2021-01-28 06:57
create table result_tb (sn int AUTO_INCREMENT, 列A int,列B int,列X int);
insert into result_tb (列A,列B) select 列A,列B from 表A;
update result_tb set 列X=sum(列A-列B) where sn<2;
update result_tb set 列X=sum(列A-列B) where sn<3;
update result_tb set 列X=sum(列A-列B) where sn<4;
全部回答
  • 1楼网友:酒安江南
  • 2021-01-28 09:22
select *,z=(select SUM(x-y) from t where t.b<=tt.b group by a) from t tt这个有多个返回值报错。试下面的写法 select 列A,列B,sum(列B)over(order by 列B)列X from 表A
  • 2楼网友:低血压的长颈鹿
  • 2021-01-28 08:14
私信我,留下QQ,告诉你最好的解决办法,肯定高效 再看看别人怎么说的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯