在我的表(tbl_emi)中,记录cardno下有一些重复的值,我希望下面的更新查询只更新表中只有一个唯一cardno的记录。 RecAmt
应使用extraamt
的总和进行更新,其中日期为最低日期+ recamt
日期为今天的日期。
UPDATE e5
SET RecAmt=
( SELECT
(SELECT sum(extraamt)
FROM Tbl_Emi e1
WHERE LastRecDate<(CAST(GETDATE() AS DATE))
AND e1.CardNo=e.CardNo) +
(SELECT RecAmt
FROM Tbl_Emi e2
WHERE LastRecDate=(CAST(GETDATE() AS DATE))
AND e2.CardNo=e.CardNo)
FROM Tbl_Emi e
WHERE e.lastrecdate=(CAST(GETDATE() AS DATE))
AND Status in('N','P')
AND e.CardNo=e5.CardNo--step 8 manually add the extra amount to the recovery amount
)
FROM Tbl_Emi e5
WHERE LastRecDate=(CAST(GETDATE() AS DATE))
AND Status in('N','P')
答案 0 :(得分:0)
对于您提出的问题,您的查询过于复杂。我无法修复此查询,因为您没有告诉我它应该做什么或者您想要完成什么。
所以我只是给你一个解决你所描述的问题的查询:
仅更新cardNo
唯一的行。我不知道更新它的内容(你没有告诉)所以我只是用虚拟值更新它:
UPDATE Tbl_Emi e SET RecAmt = 1
WHERE EXISTS
(SELECT * FROM Tbl_Emi
WHERE e.CardNo = CardNo
GROUP BY CardNo
HAVING COUNT(*) = 1);