I want to update SUM in same SQL table based on project id and Channel. for Total Channel= SUM(Channel 1 + Channel 2)
id | Channel | Project_id | Column1 | Column 2 | Column 3 | ----------------------------------------------------------- 1 Total Channel PR1 10 10 10 2 Channel 1 PR1 5 5 5 3 Channel 2 PR1 5 5 5 4 Total Channel PR2 20 40 30 5 Channel 1 PR2 10 20 15 6 Channel 2 PR2 10 20 15 7 Total Channel PR3 30 50 10 8 Channel 1 PR3 15 25 5 9 Channel 2 PR3 15 25 5
I am trying with below Query, but something is wrong in this query
UPDATE 
    results AS r 
JOIN
    ( SELECT   project_id, 
               SUM(Column1) AS sum_column1,
               SUM(Column2) AS sum_column2,
               SUM(Column3) AS sum_column3,
      FROM     results 
      WHERE    channel <> 'Total Channel' and project_id=@project_id
      GROUP BY project_id
    ) AS grp
   ON  
       grp.project_id = r.project_id 
SET 
   r.column1 = grp.sum_column1,
   r.column2 = grp.sum_column2,
   r.column3 = grp.sum_column3
WHERE 
   r.project_id = @project_id and r.channel='Total Channel';
Advertisement
Answer
Not sure what your database is but if it is MSSQL Server then it is straight forward using CTE (Common Table Expression):
;with cte_total ( select project_id, sum(column1) [c1total], sum(column2) [c2total], sum(column3) [c3total] from <YourTableName> where channel <> 'Total Channel' group by project_id ) update t set column1 = c1Total, column2 = c2total, column3 = c3total from <YourTableName> t inner join cte_total ct ON (ct.project_id = t.project_id) where t.chanel = 'Total Channel'
I have removed spaces from column names to make it easier.
An easier would be to sum up by project id and then insert total rows rather than updating them.