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.
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
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.
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.