Вы не можете использовать GROUP BY
непосредственно в качестве цели DELETE
, но вместо этого вы можете использовать PARTITION BY
.
Это полезная альтернатива использованию GROUP BY
и подзапросу для таких задач, как удаление дубликатов .
В сочетании с оконными агрегатными функциями это позволяет вам выполнять множество задач, которые может разрешить гипотетический DELETE ... GROUP BY
.
например. Для следующей настройки
DECLARE @foo TABLE
(
col1 int,
col2 int
)
INSERT INTO @foo
SELECT 1,100 UNION ALL
SELECT 1,123 UNION ALL
SELECT 2,150 UNION ALL
SELECT 2,200
Это , а не действительный синтаксис
DELETE FROM @foo
GROUP BY col1
HAVING SUM(col2) > 300
Однако это
;WITH cte AS
(
SELECT SUM(col2) OVER (PARTITION BY col1) AS S
FROM @foo
)
DELETE FROM cte
WHERE S > 300