sql-server - 想要根据两个 id 更新列,它们有两个百分比
问题描述
这是我的存储过程。在这里,我得到两个百分比的 id 值。我想根据与该 id 具有百分比的 id 列更新 acc_cashbook 中的列金额。但在这里它仅基于一个 id 进行更新。我想根据两个 id 更新到他们的特定列。请帮我。
ALTER procedure [dbo].[refdocedit]
(@RefDocID int,
@LabNo int)
as
begin
declare @U_labNo int
declare @TestOrPkg int
declare @ID int
declare @StdAmt int
declare @Percentage decimal
declare @NameOfParty varchar(50)
declare @Voucher_NameOfParty varchar(50)
declare @Amount decimal
select @U_labNo=U_labNo from LabRegDetail where LabNo=@LabNo
select @TestOrPkg=TestOrPkg,@ID=ID,@StdAmt=StdAmt from LabPatientTestDetails where U_labNo=@U_labNo
select @Percentage=Percentage from RefDocLabCommission where RefDocID=@RefDocID and ID=@ID
update LabRegDetail set RefDocId=@RefDocID where LabNo=@LabNo
select NameOfParty,Voucher_NameOfParty,Amount from Acc_CashBook where LabNo=@LabNo and ID=@ID
and Ns_Or_PHM=@TestOrPkg
set @Amount=(select distinct (@Percentage/100)*@StdAmt from RefDocLabCommission rdlc,LabRegDetail lrd,LabTestMaster ltm,LabPatientTestDetails lptd,Acc_CashBook acc
where lrd.LabNo=acc.LabNo and lptd.U_labNo=lrd.U_labNo and lrd.RefDocId=rdlc.RefDocID and rdlc.ID=ltm.TestID
and rdlc.ID=acc.ID and lrd.LabNo=@LabNo and acc.ID=@ID)
set @NameOfParty=(select RefFirstName+''+RefMiddleName+''+RefLastName from RefDocMaster where RefDocID=@RefDocID)
update Acc_CashBook set NameOfParty=@NameOfParty,Voucher_NameOfParty=@NameOfParty
where LabNo=@LabNo and Voucher_PartyType=2
--and Ns_Or_PHM=@TestOrPkg and ID=@ID
update Acc_CashBook set Amount=@Amount where Voucher_PartyType=2 and LabNo=@LabNo
update Acc_BankBook set NameOfParty=@NameOfParty,Voucher_NameOfParty=@NameOfParty
where LabNo=@LabNo and Voucher_PartyType=2
--and Ns_Or_PHM=@TestOrPkg and ID=@ID
update Acc_BankBook set Amount=@Amount where Voucher_PartyType=2 and LabNo=@LabNo
end
解决方案
我认为问题在于你在程序上思考 - 你将如何用简单的代码而不是基于集合来做到这一点。我已经根据我对模式的假设尽可能地重新编码了它。看看这个。它现在只剩下几个基于集合的更新。
还假设仍然需要选择查询,并且它可能会从连接返回多行。如果不是,请删除不同的,或完全删除查询。
ALTER procedure [dbo].[refdocedit]
(@RefDocID int,
@LabNo int)
as
begin
declare @NameOfParty varchar(50)
update LabRegDetail set RefDocId=@RefDocID where LabNo=@LabNo
select @NameOfParty= RefFirstName+''+RefMiddleName+''+RefLastName from RefDocMaster where RefDocID=@RefDocID
select distinct acc.NameOfParty,acc.Voucher_NameOfParty,acc.Amount
from LabRegDetail lrd
join LabPatientTestDetails lptd on lptd.U_labNo=lrd.U_labNo
join Acc_CashBook acc on acc.ID=lptd.ID and acc.Ns_Or_PHM=lptd.TestOrPkg
where lrd.LabNo=@LabNo
update acc set NameOfParty=@NameofParty, Voucher_NameOfParty=@NameOfParty,
Amount=(rdlc.Percentage/100)*lptd.StdAmt
from LabRegDetail lrd
join LabPatientTestDetails lptd on lptd.U_labNo=lrd.U_labNo
join Acc_CashBook acc on acc.ID=lptd.ID and acc.Voucher_PartyType=2
join LabRegDetail lrd on lrd.LabNo=acc.LabNo
join RefDocLabCommission rdlc on lrd.RefDocId=rdlc.RefDocID and rdlc.ID=acc.ID
where lrd.LabNo=@LabNo
update bb set NameOfParty=@NameOfParty,Voucher_NameOfParty=@NameOfParty,
Amount=(rdlc.Percentage/100)*lptd.StdAmt
from LabRegDetail lrd
join LabPatientTestDetails lptd on lptd.U_labNo=lrd.U_labNo
join Acc_CashBook acc on acc.ID=lptd.ID and acc.Voucher_PartyType=2
join LabRegDetail lrd on lrd.LabNo=acc.LabNo
join RefDocLabCommission rdlc on lrd.RefDocId=rdlc.RefDocID and rdlc.ID=acc.ID
join Acc_BankBook b on bb.LabNo=lrd.LabNo and bb.Voucher_PartyType=2
where lrd.LabNo=@LabNo
end
推荐阅读
- angular - Angular:更新后更新 Mat-Table 内容
- r - 为什么不在 RStudio 中打印并行作业?
- mongodb - MongoDB String 数据变成了 Object
- java - Spark java:在多个列上聚合并重命名它们
- ubuntu - 无法升级 NVidia 软件包
- sql - SQL 查询在节点上不起作用,但在 pgadmin 4 中起作用
- iframe - 在 Google 搜索页面中嵌入 iFrame
- c# - Entity Framework Core GroupBy - 相关实体上的聚合函数
- python - 如何从 python 中的批量文件的开头和结尾删除字节?
- c# - 我无法弄清楚这个 XML 解析和/或字符串替换