如何将项目的发票总额更新到IS或Business两列之一
本文关键字:Business 两列 IS 项目 更新 | 更新日期: 2023-09-27 18:17:55
我有两个表:
一个是发票表,它有一个名为BusinessOrIS
的查找表,用于识别它是"is"还是"Business";还有一个已花费的栏,用于显示发票的金额。
另一个表是项目表,它有两列需要更新'totalISSpent'和'totalBusinessSpent'。
所以我要做的是取花费金额的总和,其中BusinessOrIS =1(is)和发票。投影=项目。以及BusinessOrIS =2(商业)和发票。投影=项目。并将其滚动到'totalISSpent'和'totalBusinessSpent'
//我现在所拥有的是在InsertButton_Click事件的c#一侧:
//输入co
SqlConnection db = new SqlConnection("mystring")SqlTransaction transaction;
db.Open()
transaction = db.BeginTransaction();
UPDATE Projects Set ProjectSpentIS = (SELECT SUM(Invoices.Spent)
FROM Invoices WHERE Invoices.CostToISorBusiness ='1'
AND Projects.Projectid = Invoices.ProjectID)
UPDATE Projects Set ProjectSpentBusiness =
(SELECT SUM(Invoices.Spent) FROM Invoices
WHERE Invoices.CostToISorBusiness ='2' AND
Projects.Projectid = Invoices.ProjectID)
transaction.Commit();
我想我可能对你的模式设计有问题(因为你似乎有一个多域表,这是一个禁忌,或者至少应该为将来的扩展设置数据库)。但是,你还没有发布足够的信息来建议修改。
但是,您应该能够将UPDATE
重述到一个SQL语句中:
UPDATE Projects as a
SET ProjectSpentIS = COALESCE((SELECT SUM(b.Spent)
FROM Invoices as b
WHERE b.CostToISOrBusiness = '1'
AND b.ProjectId = a.ProjectId), ProjectSpentIS),
ProjectSpentBusiness = COALESCE((SELECT SUM(b.Spent)
FROM Invoices as b
WHERE b.CostToISOrBusiness = '2'
AND b.ProjectId = a.ProjectId),
ProjectSpentBusiness)
WHERE EXISTS (SELECT '1'
FROM Invoices as b
WHERE b.ProjectId = a.ProjectId
AND b.CostToISOrBusiness in ('1', '2'))