[英]Update table based on the query returned in SQL Server
I am stuck with a update query. 我陷入了更新查询。 I have a query as
我有一个查询
SELECT s_no, loan_id,repayment_date,principal,loan_balance, count(*) as repeatTimes
FROM loan_repayment_plan_mcg
GROUP BY s_no, loan_id, repayment_date,principal,loan_balance
HAVING count(*) > 1
It returns this output: 它返回以下输出:
s_no loan_id repayment_date principal loan_balance repeatTimes
1 21111 2012-03-13 0.00 5000.00 2
2 21311 2012-04-12 0.00 2000.00 2
3 21111 2012-05-13 500 5000.00 2
4 21111 2012-06-14 0.00 5000.00 3
I want to update loan_balance
multiplied by repeatTimes
from my above select query based on loan_id
and repayment_date
which combines together to make a unique row. 我想更新
loan_balance
乘以repeatTimes
基于我上面的选择查询loan_id
和repayment_date
它结合在一起,使一个唯一行。
The traditional way, using UPDATE from JOIN 传统方式,使用JOIN中的UPDATE
update A
set loan_balance = loan_balance * repeatTimes
from loan_repayment_plan_mcg A
join
(
SELECT s_no, loan_id,repayment_date,principal,loan_balance, count(*) as repeatTimes
FROM loan_repayment_plan_mcg
GROUP BY s_no, loan_id, repayment_date,principal,loan_balance
HAVING count(*) > 1
) B on A.s_no = B.s_no
and A.loan_id = B.loan_id
and A.repayment_date = B.repayment_date
and A.principal = B.principal
and A.loan_balance = B.loan_balance;
Using windowing functions and CTE in SQL Server 2008 在SQL Server 2008中使用开窗功能和CTE
;with cte as (
SELECT *,sum(loan_balance) over (
partition by s_no,loan_id,repayment_date,principal,loan_balance) total_balance
FROM loan_repayment_plan_mcg
)
update cte
set loan_balance = total_balance
where loan_balance != total_balance;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.