wake-up-neo.com

SQL Server Update Group von

Ich versuche, dies unter MS-SQL auszuführen, erhalte jedoch einen Fehler nur in der Zeile Group by

update #temp
Set Dos=Count(1)
From Temp_Table2010 s
where Id=s.Total and s.total in (Select Id from #temp)
group by s.Total

Weiß jemand, wie ich dieses Problem mit guter Leistung lösen kann.

40
Gerardo Abdo

Versuchen

;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 
60
Code Magician

In SQL Server können Sie die Aggregation in einer Aktualisierungsabfrage ausführen, indem Sie sie in einer Unterabfrage ausführen und sie dann in der Tabelle verknüpfen, die Sie aktualisieren möchten.

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 

Dies tun:

WHERE total in (select id from #temp)

Und dann:

 INNER JOIN counts 
    ON t.id = counts.total 

Ist überflüssig.

Der Join löst die Anforderung "total in (...)". Gruppieren Sie auf dem Schlüssel und treten Sie dann bei.

21
MattInNY

Sie können in einer UPDATE-Abfrage zunächst einmal kein Aggregat verwenden - obwohl Sie die Fehlermeldung nicht in Ihre ursprüngliche Frage aufgenommen haben, vermute ich, dass dies der Fall ist.

Sie müssen das Aggregat vor der Aktualisierung berechnen und die Ergebnisse in einer temporären Tabelle speichern und sich dann mit dieser Tabelle verbinden, um die Aktualisierung durchzuführen.

12
SqlRyan