根据第一个表的ID对第二个表中的值求和,并在第一个表

时间:2018-03-31 11:19:37

标签: mysql sql database procedure

如何在第一个表格中显示UkupnaCena插入第Cena列的和值,其中第一个表中的RacunID等于其他表中的RacunID。例如,如果第一个表中RacunID等于1,我希望其UkupnaCena等于Cena为{1}}的列RacunID中所有值的总和。

表:

到目前为止我的程序:

Create procedure sp_RacunUpdate(
    @pRacunID int,
    @pStatusRacuna nvarchar(50),
    @pDatum nvarchar(20),
    @pOpis nvarchar(200),
    @pMesto nvarchar(50),
    @pKupacID int
)
as begin
Declare @pUkupnaCena decimal(20,2)
select @pUkupnaCena=sum(Cena) from Stavka
inner join Racun
on Racun.RacunID=Stavka.RacunID
Where Racun.RacunID=Stavka.RacunID
group by Stavka.RacunID    
begin transaction
UPDATE Racun
SET StatusRacuna=@pStatusRacuna, Datum=@pDatum, Opis=@pOpis,Mesto=@pMesto,UkupnaCena=@pUkupnaCena,KupacID=@pKupacID
WHERE RacunID=@pRacunID
IF @@ERROR <> 0
BEGIN
ROLLBACK
END
ELSE
BEGIN
COMMIT
END
END
GO

2 个答案:

答案 0 :(得分:1)

您可以将更新查询修改为此类

UPDATE Racun from Racun
SET UkupnaCena=(select sum(Cena) from Stavka s where s.RacunID= Racun.RacunID), Datum=@pDatum, Opis=@pOpis,Mesto=@pMesto,KupacID=@pKupacID 
WHERE RacunID=@pRacunID

答案 1 :(得分:1)

我相信你想要一个相关的子查询。在MySQL中,这看起来像:

UPDATE Racun r
    SET StatusRacuna = @pStatusRacuna,
        Datum = @pDatum,
        Opis = @pOpis,
        Mesto = @pMesto,
        KupacID = @pKupacID,
        UkupnaCena = (SELECT SUM(s.Cena) FROM Stavka s WHERE s.RacunID = r.RacunId)
    WHERE RacunID = @pRacunID;

但是,您的代码看起来不像MySQL;它看起来更像是SQL Server。在任一数据库中,您都可以:

UPDATE Racun
    SET StatusRacuna = @pStatusRacuna,
        Datum = @pDatum,
        Opis = @pOpis,
        Mesto = @pMesto,
        KupacID = @pKupacID,
        UkupnaCena = (SELECT SUM(s.Cena) FROM Stavka s WHERE s.RacunID = Racun.RacunId)
    WHERE RacunID = @pRacunID;

这里唯一的区别是删除外部查询中的表别名。