Below update statement is running in a loop, how do i avoid this?
I have 86Million rows in the table
x
update dbo.pw_part set ptype_pctg=pw.pctg
from (
select id,ppe,ptype,isnull(SUM(gw) * 100.0 / nullif(SUM(SUM(gw)) OVER (partition by ssn, ppe), 0), 0) as pctg
from pw_part
where year(ppe) <= 2017
group by id,ppe,ptype,gw
) as pw
Table Data as below
ID date type gw payPercentage
359 2015-03-28 R 1563.79 NULL
359 2015-04-04 M 11.41 NULL
359 2015-04-04 R 1563.79 NULL
359 2015-04-11 M 11.41 NULL
359 2015-04-11 R 1563.79 NULL
359 2015-04-18 M 11.41 NULL
795 2018-01-12 C 2382.39 NULL
795 2018-01-12 M 3.72 NULL
795 2018-01-12 R 3269.23 NULL
795 2018-01-26 C 1437.74 NULL
795 2018-01-26 M 3.72 NULL
795 2018-01-26 R 3269.23 NULL
Desired table should be
ID date type gw payPercentage
359 2015-03-28 R 1563.79 100
359 2015-04-04 M 11.41 .72
359 2015-04-04 R 1563.79 99.27
359 2015-04-11 M 11.41 .72
359 2015-04-11 R 1563.79 99.27
359 2015-04-18 M 11.41 100
795 2018-01-12 C 2382.39 42.12
795 2018-01-12 M 3.72 .06
795 2018-01-12 R 3269.23 57.80
795 2018-01-26 C 1437.74 30.52
795 2018-01-26 M 3.72 .07
795 2018-01-26 R 3269.23 69.4
Thank you,
Yum
Advertisement
Answer
Assuming that your query runs, you seem to need a where
clause. I would speculate:
update dbo.pw_part
set ptype_pctg = pw.pctg
from (select id, ppe ,ptype,
coalesce(SUM(gw) * 100.0 / nullif(SUM(SUM(gw)) OVER (partition by ssn, ppe), 0), 0) as pctg
from pw_part
where year(ppe) <= 2017
group by id, ppe, ptype
) pw
where pw_part.id = pw.id and pw_part.ppe = pw.ppe and
pw_part.ptype = pw.ptype ;
Note that I removed gw
from the group by
. It is used as the argument to an aggregation function, so I’m guessing is should not also be a gropu by
key.