Обновление столбца таблицы другим столбцом таблицы на основе комбинации из 2 столбцов, если внешний вид комбинации их значений превышает 1 - PullRequest
0 голосов
/ 11 июля 2019

У меня есть таблица 'list', как это

Unique|S_Number|New_Attr|C_Number|C_Order|A_Number
   123       101        1       -A       1       0
   124       101        1       -A       1       2
   125       101        1       -A       1       3
   127       101        1       -B       2       4
   128       101        1       -C       3       5
   129       101        1       -D       4       6

У меня есть это так

Unique|S_Number|New_Attr|C_Number|C_Order|A_Number
  123       101        1       -A        1       0
  124       101        2       -A        1       2
  125       101        3       -A        1       3
  127       101        1       -B        2       4
  128       101        1       -C        3       5
  129       101        1       -D        4       6

означает, что хотите обновить New_Attr со значением A_Number, только когда есть комбинацияS_Number и C_Number больше 1, а A_Number больше 0

Я создал временную таблицу list_temp2 для вставки только

CREATE TABLE list_temp2
(
  S_number CHAR(32) NOT NULL,
  C_number CHAR(32),
  CNT integer
);


INSERT INTO list_temp2 p2 (p2.s_number, p2.c_number, p2.cnt)
SELECT p1.S_number, p1.C_number,COUNT(*) FROM list p1
GROUP BY  p1.S_number, p1.C_number
HAVING COUNT(*)>1;

Вставляет одну строку

  101  -A 3
SELECT p1.s_number, p1.c_number, p1.New_Attr, p1.a_number, p2.cnt FROM list p1
LEFT JOIN
list_temp2 p2 ON p1.s_number = p2.s_number
where p1.a_number>1 AND p2.cnt>1 AND p2.s_number = p1.s_number AND p2.c_number = p1.c_number;

Дает 2 строки (ожидается)

  101                       -A  1   2   3
  101                       -A  1   3   3

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

UPDATE list p1 SET p1.New_Attr=
(
SELECT p1.a_number FROM list p1
LEFT JOIN
list_temp2 p2 ON p1.s_number = p2.s_number
where p1.a_number>0 AND p2.cnt>1 AND p2.s_number = p1.s_number AND p2.c_number = p1.number
);

Этовыводит слишком много значений, так как команда Select дает 2 строки

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Я думаю, что вы хотите фильтровать UPDATE:

UPDATE list
    SET New_Attr = A_Number
    WHERE A_Number > 0 AND S_Number + C_Number > 1;
0 голосов
/ 11 июля 2019
UPDATE your_table
SET New_Attr = IIF(A_Number>0 AND S_Number + C_Number > 1, A_Number, New_Attr)

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

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