Sql Server 两表相减
这是我的数据源,需要实现@test 表的Qty要减去@test1表的Qty,条件是Customer相同,不清楚如何操作,没有思路declare @test table
(
ID int identity(1,1),
Customer varchar(15),
Qty int
)
declare @test1 table
(
ID int identity(1,1),
Customer varchar(15),
Qty int
)
insert into @test values('113375',2700)
insert into @test values('113375',4500)
insert into @test values('113375',8100)
insert into @test1 values('113375',2100)
insert into @test1 values('113375',2400)
insert into @test1 values('113375',2100)
insert into @test1 values('113375',2100)
insert into @test1 values('113375',1800)
insert into @test1 values('113375',2100)
--在Customer相同时,将@test表的Qty依次减去@test1表的Qty,
--2700-2100=600
--4500+600-2400=2700
--2700-2100=600
--8100+600-2100=6600
--6600-1800=4800
--4800-2100=2700
--最终@test 输出3 111375 2700
这种简单问题gpt真能搞定 是要整个的计算过程呢?还是只要最终计算结果?
只要最终结果:SELECTCustomer,SUM(A.QTY) - SUM(B.QTY) QTY FROM TESTA
LEFT JOINTEST1 B ON A.Customer = B.Customer
GROUP BY A.Customer 容易搞定问题的方法都是好方法 要实现您描述的操作,即根据Customer相同这一条件,从@test表的Qty中减去@test1表的Qty,您可以使用SQL的UPDATE语句结合JOIN操作。以下是一个基本的SQL示例,展示了如何实现这一功能:
sql语句如下:
UPDATE @test
SET @test.Qty = @test.Qty - COALESCE(@test1.Qty, 0)
FROM @test
LEFT JOIN @test1 ON @test.Customer = @test1.Customer;
这里的关键点解释:
使用LEFT JOIN来确保@test表中的所有记录都会被更新,即使@test1表中没有匹配的Customer。
使用COALESCE函数来处理@test1中Qty为NULL的情况。如果@test1.Qty是NULL,则COALESCE会返回0,这样就不会影响@test.Qty的值。
在SET子句中,我们从@test.Qty中减去@test1.Qty的值(或0,如果@test1.Qty是NULL)。
请注意,这只是一个基本的示例,并且假设了您的数据库支持这种语法。不同的数据库系统(如MySQL、SQL Server、Oracle等)可能有一些细微的语法差异。确保根据您的具体数据库系统调整此查询。
以上来自GPT自动生成。 DECLARE @i INT = 0, @j INT = 0, @id1 INT, @Qt1 INT = 0, @Qt2 INT=0;
WHILE @i <= (SELECT COUNT(1) FROM @test)
BEGIN
IF @Qt1 < @Qt2OR (@Qt1 = 0 AND @Qt2 = 0)
BEGIN
SET @i = @i + 1;
SELECT @Id1 = ID, @Qt1 = @Qt1 + Qty FROM @test WHERE ID = @i;
END
PRINT @Qt1
WHILE @j <= (SELECT COUNT(1)FROM @test1)
BEGIN
SET @j = @j + 1;
SELECT @Qt2 = Qty FROM @test1 WHERE ID = @j;
IF @Qt1 - @Qt2 > 0
BEGIN
SELECT @Qt1 = @Qt1 - @Qt2;
BREAK;
END
END;
END;
SELECT ID,Customer,@Qt1 + @Qt2 结果FROM @test WHERE ID= @Id1 lorzl 发表于 2024-4-16 14:03
DECLARE @i INT = 0, @j INT = 0, @id1 INT, @Qt1 INT = 0, @Qt2 INT=0;
WHILE @ ...
不对 其他数据可能会卡死 直接left join 左连接 然后group by Customer 就可以了 如果忽略过程,只要结果的话,两表加起来,然后 join 相减就完了。 sky_walk 发表于 2024-4-16 11:46
是要整个的计算过程呢?还是只要最终计算结果?
只要最终结果:SELECTCustomer,SUM(A.QTY) - SUM(B.QT ...
这个不行,因为数据一边多一边少,sum(A.Qty)会出现笛卡尔积的情况
页:
[1]
2