Oracle SQL-запрос выводится в необходимом формате путем добавления столбцов - PullRequest
0 голосов
/ 04 октября 2018

У меня есть таблица базы данных оракула 'mytable' со следующими данными-

ID          ORDER    ACTION     CB        TV
35547225    CHANGE<  Add        TV       100788581
35355239    CHANGE<  Add        G76763164 014580531
35779535    CHANGE   Add        TVservi   038894810
35591230    CHANGE<  Add        G87178597   
35814001    CHANGE   Rem        TVservi   011733179
35418962    CHANGE<  Rem        TV        011733179

Я хочу получить вывод в следующем формате с дополнительным столбцом как 'CT' -

ID          ORDER   ACTION  CB          TV          CT
35547225    CHANGE  Add                 100788581   Only TV
35355239    CHANGE  Add     G76763164   014580531   Both
35779535    CHANGE  Add                 038894810   Only TV
35591230    CHANGE  Add     G87178597               Only CB
35814001    CHANGE  Remove              011733179   Only TV
35418962    CHANGE  Remove              011733179   Only TV

Iхотите следующие изменения в выводе -

  • в столбце «ЗАКАЗАТЬ» - если в «mytable» указано «CHANGE <», то в выводе должно быть «CHANGE». </p>

  • в столбце «ACTION» - если это «Rem» в «mytable», то в выводе должно быть «Remove».

  • в столбце «CB»- если он начинается с G, а затем с 8-значным числом, тогда оставьте его как есть, в противном случае сделайте его пустым в выводе

  • Добавьте еще один столбец 'CT' в вывод, написав замечание на основе следующегоусловие-

    • Если CB НЕДЕЙСТВИТЕЛЕН, и ТВ НЕ НЕДЕЙСТВИТЕЛЕН, тогда 'Только ТВ'

    • Если ЦБ НЕ НЕДЕЙСТВИТЕЛЕН, и ТВ НЕ НЕДЕЙСТВИТЕЛЕНзатем «Оба»

    • Если CB НЕДЕЙСТВИТЕЛЕН, а ТВ НЕДЕЙСТВИТЕЛЕН, тогда «Только CB»

1 Ответ

0 голосов
/ 04 октября 2018

Вы можете использовать предложение CASE для вычисления различных значений столбца в соответствии с произвольной логикой:

select
    id,
    case when "order" = 'CHANGE' then 'CHANGE'
         when "order" = 'CHANGE<' then 'CHANGE'
    end as "order",
    case when action = 'Rem' then 'Remove'
         else action
    end as action,
    case when regexp_like(cb, 'G[0-9]{8}') then cb
         else null
    end as cb,
    tv,
    case when cb is null and tc is not null then 'Only TV'
         when cb is not null and tv is not null then 'Both'
         when cb is not null and tv is null then 'Only CB'
    end as ct
  from my_table

Обратите внимание, что order является зарезервированным словом, которое вы обычно не используете в качестве столбцаназвание.Если вы хотите использовать его, вам нужно заключить его в двойные кавычки (").

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