Слейте уникальные ряды на основе отдельного столбца

Я просто пытался сделать некоторую геракловую задачу с Oracle.

У меня есть стол, содержащий 3 колонки

    ColA   ColB   ColC  ColD
  ---------------------------
    123     N     null   1
    100     Y     AAAA   1
    123     Y     XXXX   2
    100     Y     YYYY   2

Я должен обновить ColB и ColC , чтобы показать следующий набор результатов.

    ColA   ColB  ColC       ColD
  -------------------------------
    123    Y     XXXX         1
    100    Y     AAAA\YYYY    1
    123    Y     XXXX         2
    100    Y     YYYY         2

Я должен обновить ColB с Y , если какой-либо из уникальных отчетов еще содержит Y N .

И для ColC я хочу обновить ценности, отделенные \, где оба ряда содержат стоимость еще просто стоимость.

Я попытался сделать это с запросом на обновление, но ghosh......... Это кажется невозможным.

Кто-либо может предложить возможное решение или что-то?

Мне сказали использовать PL/SQL при необходимости. Это сделает?

PS: I have also seen the other questions that seems similar but havn't got any solution yet.

EDIT: We need to update just those rows where ColD is 1.

0
nl ja de
Почему все ряды то, где КОЛА == 100 не AAAA\YYYY ? Это подразумевает своего рода неявный заказ, который я can' t видят, как можно достигнуть от обеспеченных данных... Вы хотите, чтобы у только случайного ряда были обе ценности? Наконец, , почему вы хотите сделать это вообще? Wouldn' t имеет больше смысла уезжать, это нормализовало или денормализовать его правильно так, чтобы КОЛА была уникальна?
добавлено автор Ben, источник
у вас есть меньше рядов в наборе результатов, чем во входе. Вы удаляете некоторых? Как это может быть достигнуто только с обновлениями?
добавлено автор Florin Ghita, источник
Бен прав. Почему четвертый ряд doesn' у t есть AAAA\YYYY?
добавлено автор Florin Ghita, источник
+1 для наблюдения. Я действительно сожалею об этом. Отредактированный.
добавлено автор akhil, источник
Мой приносит извинения, отредактированный.
добавлено автор akhil, источник

1 ответы

Вопрос, чтобы найти, как colB и colC посмотрят:

select 
   colA, 
   case when count(case when colB='Y' then 1 end) > 0 
     then 'Y' 
     else 'N' 
   end as colB,
   LISTAGG(colC, '\') WITHIN GROUP (ORDER BY colA) AS colC
from your_table
group by colA;

От этого вы просто стреляете в СЛИЯНИЕ как

update your_table  a
using query b
on (a.colA=b.colB and colD=2)
when matched then update 
    a.colB=b.colB, 
    a.colC=b.colC
1
добавлено
добавлено автор Florin Ghita, источник
Привычка LISTAGG работает на меня, поскольку я использую 10 г, и я предполагаю для 11 г
добавлено автор akhil, источник
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)

Oracle RU
Oracle RU
303 участник(ов)

Русскоязычная группа по Oracle. — Архитектура СУБД — PL/SQL — Оптимизация — Администрирование — Вакансии Oracle (указать инфу по вилке ЗП и удалёнке) Приглашайте коллег :-) Запрещены: личные оскорбления, обсуждения оффтопик вопросов политики и религии