Задать вопрос

Как удалить дубликаты и просуммировать ячейки?

Здравствуйте. Есть такая таблица:
+----+-------------------------+------+------+----------+--------------+---------+-------+----------+--------+------+
| id | date_id                 | year | week | store_id | store_id_new | good_id | promo | quantity | order  | cost |
+----+-------------------------+------+------+----------+--------------+---------+-------+----------+--------+------+
| 1  | 2015-12-07 00:00:00.000 | NULL | NULL | 5        | NULL         | 26      | 0     | 2        | 764536 | NULL |
+----+-------------------------+------+------+----------+--------------+---------+-------+----------+--------+------+
| 2  | 2015-12-07 00:00:00.000 | NULL | NULL | 5        | NULL         | 26      | 0     | 1        | 764536 | NULL |
+----+-------------------------+------+------+----------+--------------+---------+-------+----------+--------+------+


Как видно, четыре поля (date_id, store_id, good_id и order) имеют одинаковое значение. Хотелось бы обновить таблицу, при этом просуммировав поле quantity у строк, которые имеют одинаковое значение по 4 вышеуказанным полям, т.е. получить что-то такое:
+----+-------------------------+------+------+----------+--------------+---------+-------+----------+--------+------+
| id | date_id                 | year | week | store_id | store_id_new | good_id | promo | quantity | order  | cost |
+----+-------------------------+------+------+----------+--------------+---------+-------+----------+--------+------+
| 1  | 2015-12-07 00:00:00.000 | NULL | NULL | 5        | NULL         | 26      | 0     | 3        | 764536 | NULL |
+----+-------------------------+------+------+----------+--------------+---------+-------+----------+--------+------+
  • Вопрос задан
  • 332 просмотра
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
Так вроде же
select id , date_id, year , week , store_id , store_id_new , good_id , promo , SUM(quantity) , order , cost
from table

group by
id , date_id, year , week , store_id , store_id_new , good_id , promo , order , cost

То есть, в поле GROUP BY добавляем все поля, для которых не нужны арифметические операции. В данном случае увидел только quantity
Ответ написан
@d-stream
Готовые решения - не подаю, но...
Если это действительно надо, то проще всего в рамках транзакции вставить выборку во временную таблицу, удалить "дубликаты" из основной и вставить в основную результат агрегации из временной. Тут правда возникнет вопрос id (надеюсь он и есть pk ?)
Ответ написан
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
Критерий удаления дубликатов: оставить с минимальным id?
Делаете курсор с группировкой по date_id, store_id, good_id и order и фильтром: количество строк больше одной. Для каждой строки курсора определяете минимальный id и обновляете quantity суммой по date_id, store_id, good_id и order. Удаляете лишние. Переходите на следующую строку курсора.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы