SQL - ВСТАВИТЬ новую строку, используя сумму двух существующих строк из одной таблицы - PullRequest
1 голос
/ 30 апреля 2020

Я борюсь с написанием рабочего SQL сценария, который берет две строки из одной таблицы и вставляет новую строку в ту же таблицу, копируя значения из любой исходной строки, кроме одного столбца, который использует сумму две строки.

Таблица выглядит примерно так, и полученную вставку я хочу получить

--------------------------------------------------           
| activity | place | begin_date | end_date | price |        
--------------------------------------------------         -------------------------------------------
| running  | gym   | 2020-6-1  | 2020-7-1  |  10   |   >   | sports | gym | 2020-6-1 | 2020-7-1 | 30 |
---------------------------------------------------        -------------------------------------------
| jumping  | gym   | 2020-6-1  | 2020-7-1  |  20   |
---------------------------------------------------

Проблема в том, что мне нужно сгруппировать по 3 столбцам (место, дата начала и дата окончания) как У меня много разных мест, даты начала и окончания. И я хочу сочетать только спортивные состязания по бегу и прыжкам со спортом, все остальные виды деятельности не должны затрагиваться.

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Это должно сработать:

INSERT INTO table (activity, place, begin_date, end_date, price)
SELECT 'sport', [place], [begin_date], [end_date], SUM([price])
FROM table
WHERE activity = 'jumping' OR activity = 'running'
GROUP BY place, begin_date, end_date
1 голос
/ 30 апреля 2020

Ключевым моментом является то, что вы захотите добавить оператор case в ваш оператор select для 'action', а затем агрегировать вашу цену с помощью функции SUM (). Это будет выглядеть примерно так

INSERT INTO dbo.Table
( activity
, place
, begin_date
, end_date
, price
)
SELECT CASE WHEN activity = 'running' OR activity = 'jumping' THEN 'sports' ELSE activity END
, place
, begin_date
, end_date
, SUM(price)
FROM dbo.Table t
 GROUP BY CASE WHEN activity = 'running' OR activity = 'jumping' THEN 'sports' ELSE activity END
, place
, begin_date
, end_date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...