簡體   English   中英

根據SQL Server中返回的查詢更新表

[英]Update table based on the query returned in SQL Server

我陷入了更新查詢。 我有一個查詢

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

它返回以下輸出:

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

我想更新loan_balance乘以repeatTimes基於我上面的選擇查詢loan_idrepayment_date它結合在一起,使一個唯一行。

傳統方式,使用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;

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM