J'ai une table dans la base de données.
Update Bill Set Paid = Total, Status = 'Paid', Output PAID_AMT = PAID_AMT - (Total-Paid ) where Total-Paid > PAID_AMT
3 Réponses :
La requête suivante montre le montant dû, en supposant que SQL Server 2012: Vous pouvez désormais distribuer le montant: p>
Je ne sais pas quelle version de SQL Server avez-vous, si elle 2008, vous ne pouviez pas utiliser la somme de roulement avec la fonction de fenêtre. Vous pouvez essayer cette requête récursive: pour SQL Server 2012 C'est un peu plus facile: p> SQL violon Démo strong> P> P>
Si vous utilisez SQL 2012, vous pouvez utiliser ce qui suit:
--BEGIN TRAN; --CREATE TABLE Bill --( -- ID Int PRIMARY KEY IDENTITY, -- Total INT NOT NULL, -- Paid INT NOT NULL DEFAULT(0), -- Status AS -- CASE -- WHEN Paid = Total THEN 'Paid' -- WHEN Paid = 0 THEN 'Unpaid' -- ELSE 'Part Paid' -- END --); --WITH KnownValues(Total, Paid) AS --( -- SELECT 1000, 1000 -- UNION ALL SELECT 500, 400 -- UNION ALL SELECT 700, 0 -- UNION ALL SELECT 200, 0 --) --INSERT INTO Bill(Total, Paid) --SELECT * --FROM KnownValues; --COMMIT
La colonne ID pourrait-elle avoir des lacunes? Il serait donc 1, 4, 5, 6, 8?