donsllon 发表于 2022-8-3 19:14

请大神帮忙看一个SQL组合查询语句

数据库原始数据如下图:

通过查询对编码相同的数量进行求和,然后与原表中数量进行对比,对数量相加为0的,将状态更新为退

CatSky 发表于 2022-8-3 19:23

我反正没看懂你的问题,你这举的例子感觉很大问题,你的编码和通用名根本对不上,一样的通用名却是不一样的编码

碧池不要碧莲 发表于 2022-8-3 19:57

没有描述清楚哦大兄弟

donsllon 发表于 2022-8-3 20:16

CatSky 发表于 2022-8-3 19:23
我反正没看懂你的问题,你这举的例子感觉很大问题,你的编码和通用名根本对不上,一样的通用名却是不一样的 ...

是有,有编码不一样的情况,要编码相同的才相加

联盟星空 发表于 2022-8-3 20:33

看这里理解,好像跟你想要的效果也不一样呢

青丝若为霜 发表于 2022-8-3 20:38

没明白你要干啥~~

donsllon 发表于 2022-8-3 20:50

碧池不要碧莲 发表于 2022-8-3 19:57
没有描述清楚哦大兄弟

可能表述不太清楚{:1_907:}
实际就是需要先把编码相同的为数量负数的相加,然后用求的负数和再去表里比较,取相加等于0的那一条,然后将状态改为退

cchume 发表于 2022-8-3 23:11

sql不好写

cchume 发表于 2022-8-3 23:19

提供一个思路, 过滤负数的数量再 编码和数量group by 求和, 和取绝对值 然后 生成子表关联
大概这样select
t.*, tt.tui
from t
left join
(
select a,b, abs(sum(c)) c, '退' tuifrom t where c < 0 group by a,b ) tt on t.b = tt.b and t.c=tt.c

cchume 发表于 2022-8-3 23:56

cchume 发表于 2022-8-3 23:19
提供一个思路, 过滤负数的数量再 编码和数量group by 求和, 和取绝对值 然后 生成子表关联
大概这样

数量相同的话用开窗函数
页: [1] 2
查看完整版本: 请大神帮忙看一个SQL组合查询语句