SQL Server Update Group by

前端 未结 3 1578
逝去的感伤
逝去的感伤 2020-11-30 08:13

I\'m trying to execute this on MS-SQL but returns me an error just at the Group by line

update #temp
Set Dos=Count(1)
From Temp_Table2010 s
where Id=s.Total          


        
相关标签:
3条回答
  • Try

    ;with counts 
    AS 
    ( 
        SELECT total, COUNT(*) as dos
        FROM temp_table2010 
        WHERE total in (select id from #temp)
    )
    UPDATE T 
    SET dos=counts.dos
    FROM #temp T 
    INNER JOIN counts 
        ON t.id = counts.total 
    
    0 讨论(0)
  • 2020-11-30 09:00

    In SQL Server you can do aggregation in an update query you just have to do it in a subquery and then join it on the table you want to update.

    UPDATE  #temp
    SET     Dos = Cnt
    FROM    #temp 
        INNER JOIN (SELECT Total, COUNT(*) AS Cnt FROM Temp_Table2010 GROUP BY Total) AS s
            ON Id = s.Total 
    

    Doing this:

    WHERE total in (select id from #temp)
    

    And then:

     INNER JOIN counts 
        ON t.id = counts.total 
    

    Is redundant.

    The join solves the "total in (...)" requirement. Group on the key and then join.

    0 讨论(0)
  • 2020-11-30 09:05

    You can't use an aggregate in an UPDATE query, for starters - though you didn't include the error message in your original question, I suspect that's what it's telling you.

    You'll need to calculate the aggregate before your update and store the results in a temp table, and then join to that table to do your update.

    0 讨论(0)
提交回复
热议问题