Я бы создал временную таблицу с различными значениями для evid, place, employee, trident и всех других полей, которые должны быть различны:
SELECT
MIN(item) AS "item"
, evid
, place
, officer
, trident
, SPACE(100) AS "roles"
INTO #tmp
FROM table
GROUP BY
, evid
, place
, officer
, trident
UPDATE #tmp SET roles = '';
На следующем шаге вы должны агрегировать роли, поскольку ADS не имеет функции STRING_AGG
, вы должны делать это с помощью курсоров, циклов и т. Д.
Я уже писал такой код, посмотрите здесь , например.
Затем вы можете просто удалить всю исходную таблицу и вставить данные из временной таблицы. В идеале я бы сделал эти последние шаги в транзакции.
BEGIN TRANSACTION;
DELETE FROM table;
-- Assuming the table and the temp table have the same exact fields
INSERT INTO table SELECT * FROM #tmp;
END TRANSACTION;