Как обрабатывать узор в таблице - PullRequest
0 голосов
/ 11 марта 2020

Допустим, у меня есть эта таблица

Date     c1 c2  c3
3/2/2020 a  40  11
3/2/2020 b  21  32
3/2/2020 c  3   54
3/2/2020 d  1   23
3/2/2020 d  22  11 
3/2/2020 d  2   36
3/2/2020 e  31  55
3/2/2020 g  18  24

И это всего лишь фрагмент данных таблицы, основанных на указанной дате c, данные в таблице повторяются одинаково, Т.е.

Date     c1 c2  c3
3/2/2020 a  40  11
3/2/2020 b  21  32
3/2/2020 c  3  54
3/2/2020 d  1  23
3/2/2020 d  22  11 
3/2/2020 d  2  36
3/2/2020 e  31  55
3/2/2020 g  18  24 
3/3/2020 a  33  1
3/3/2020 b  1  34
3/3/2020 c  33  21
3/3/2020 d  41  44
3/3/2020 d  52  31 
3/3/2020 d  29  26
3/3/2020 e  21  89
3/3/2020 g  48  21
.
.
.
Etc. 

Я хочу найти суммирование значений c2, где значения c1 равны a и c, и обновить значение g на его основе.

Есть ли какие-либо конкретные c topi c, что вы, ребята, могли бы предложить мне прочитать. Заранее спасибо

Обратите внимание, что в столбце указана одна и та же дата для каждого шаблона.

Ответы [ 2 ]

1 голос
/ 11 марта 2020

хочу найти суммирование значений c2, где значения c1 равны a и c, и обновить значение g на его основе.

Звучит так, как будто вы это имеете в виду :

UPDATE table 
SET c2 = (SELECT SUM(c2) FROM table WHERE c1 IN ('a','c'))
WHERE c1 = 'g'

Но после некоторого обсуждения в комментариях, где у вас есть поле даты, которое определяет большую группу, в которой эти элементы повторяются, и вы хотите, чтобы суммирование было только внутри этой группы, вы должны согласовать подзапрос с внешним:

UPDATE table1
SET c2 = (SELECT SUM(x.c2) FROM table1 x WHERE x.c1 IN ('a','c') and x.date = table1.date)
WHERE c2= 'g';                                                   ------------------------

Вот пример: обратите внимание, что строка g обновлена ​​до 2, а не 3, поскольку одна из дат не входит в группу

http://sqlfiddle.com/#! 18/91335

0 голосов
/ 11 марта 2020

Используйте UPDATE следующим образом:

UPDATE YOUR_TABLE T
SET T.C2 = (
        SELECT SUM(TIN.C2)
        FROM YOUR_TABLE TIN
        WHERE TIN.DATE = T.DATE
        TIN.C1 IN ( 'a',  'c' )
    )
WHERE T.C1 = 'g'

Или вы можете использовать оператор MERGE следующим образом:

MERGE INTO YOUR_TABLE T
USING 
(SELECT DATE, SUM(C2) AS C2
   FROM YOUR_TABLE
  WHERE C1 IN ( 'a',  'c' )
  GROUP BY DATE) S
ON 
(T.DATE = S.DATE AND T.C1 = 'g')
WHEN MATCHED THEN 
UPDATE SET T.C2 = S.C2

Cheers !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...