Reputation: 3
I need to update the QTOTALNETWORTH field if QTOTALNETWORTH < (see the WHERE clause for all the fields). When I use the below query I get the 'Subquery returned more than 1 value...' error. I JOIN the cte to the ContactsQPROFILE by the primary key.
Where am I going wrong in this query? Any help is appreciated. I am using MSSQL.
WITH cte
AS (SELECT ContactsQPROFILE,
( QVALUEOFHOME + QVALUEOFOTHERRE
+ QRETIREMENTACCT + QLIQUIDASSTINPE + QBUSINESS
+ QLIFEINSHUSTERM + QLIFEINSHUSPERM
+ QLIFEINSWIFETER + QLIFEINSWIFEPER ) - QLIABILITIES AS TOTALNETWORTH
FROM ContactsQPROFILE
WHERE ( ( QVALUEOFHOME + QVALUEOFOTHERRE
+ QRETIREMENTACCT + QLIQUIDASSTINPE + QBUSINESS
+ QLIFEINSHUSTERM + QLIFEINSHUSPERM
+ QLIFEINSWIFETER + QLIFEINSWIFEPER ) - QLIABILITIES > QTOTALNETWORTH )
AND ( ( QVALUEOFHOME + QVALUEOFOTHERRE
+ QRETIREMENTACCT + QLIQUIDASSTINPE + QBUSINESS
+ QLIFEINSHUSTERM + QLIFEINSHUSPERM
+ QLIFEINSWIFETER + QLIFEINSWIFEPER ) > 0.00 ))
UPDATE cqp
SET cqp.QTOTALNETWORTH = cte.TOTALNETWORTH
FROM ContactsQPROFILE cqp
JOIN cte
ON cte.ContactsQPROFILE = cqp.ContactsQPROFILE
Upvotes: 0
Views: 255
Reputation: 3
I was getting the error due to the trigger. As soon as I disabled it I was able to run the UPDATE query without using CTE. I then enabled the trigger.
Upvotes: 0
Reputation: 3744
I think you can directly update the table:
UPDATE cqp
SET cqp.QTOTALNETWORTH = (QVALUEOFHOME + QVALUEOFOTHERRE + QRETIREMENTACCT + QLIQUIDASSTINPE + QBUSINESS + QLIFEINSHUSTERM + QLIFEINSHUSPERM + QLIFEINSWIFETER + QLIFEINSWIFEPER) - QLIABILITIES
FROM ContactsQPROFILE cqp
WHERE ((QVALUEOFHOME + QVALUEOFOTHERRE + QRETIREMENTACCT + QLIQUIDASSTINPE + QBUSINESS + QLIFEINSHUSTERM + QLIFEINSHUSPERM + QLIFEINSWIFETER + QLIFEINSWIFEPER) - QLIABILITIES
> QTOTALNETWORTH)
AND ((QVALUEOFHOME + QVALUEOFOTHERRE + QRETIREMENTACCT + QLIQUIDASSTINPE + QBUSINESS + QLIFEINSHUSTERM + QLIFEINSHUSPERM + QLIFEINSWIFETER + QLIFEINSWIFEPER) > 0.00)
Upvotes: 1
Reputation: 407
You do not need a CTE in this case because you are updating ContactsQPROFILE based on conditions internal to ContactsQPROFILE using columns only from ContactsQPROFILE.
That said, run the declarative part of the CTE alone and see if it generates duplicates for some reason.
Upvotes: 0