Функция декодирования SQL - PullRequest
0 голосов
/ 13 марта 2019

В моей заявке на «этническую принадлежность» было раскрывающееся поле с 4-мя возможными значениями.Я использовал значение, чтобы заполнить заполнитель в письме.Существовала индивидуальная логика для каждого значения, чтобы заполнить [X] через него, когда оно было выбрано в приложении.Например, когда был выбран «азиат», напротив него была скрещенная скобка.А если не выбрана, раньше была пустая скобка, которая выглядела следующим образом:

    [ ] White
    [ ] Black
    [X] Asian
    [ ] Other

Код был такой:

    SELECT
    DECODE(
    lower(ml.ethnicity),
    'Asian',
    '[X]',
    '[ ]'
    )
    FROM
    pat_race pr,
    m_ethnicity ml
    WHERE
    ml.ethnicity_id (+) = pr.ethnicity_id
    AND
    pr.pat_id =xyz;

Аналогично было 4 логикидля 4 значений, которые затем использовались в качестве заполнителей в письме.

Теперь поле этнической принадлежности изменяется с выпадающего на поле множественного выбора.

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

При выборе двух этнических групп результат выглядит следующим образом:

    [ ],[X] White
    [ ],[ ] Black
    [X],[ ] Asian
    [ ],[ ] Other

При выборе трех этнических групп результат выглядит какниже:

    [ ],[X],[ ] White
    [ ],[ ],[X] Black
    [X],[ ],[ ] Asian
    [ ],[ ],[ ] Other

Мне нужно иметь вывод, как показано ниже, при выборе нескольких значений:

    [X] White
    [X] Black
    [X] Asian
    [ ] Other

1 Ответ

0 голосов
/ 13 марта 2019

Вы не предоставили контрольный пример, поэтому я попытался представить, что у вас есть.Вот только необходимый набор столбцов для обеих таблиц:

SQL> create table m_ethnicity (ethnicity_id number, ethnicity varchar2(10));

Table created.

SQL> create table pat_race (ethnicity_id number, ethnicity varchar2(10));

Table created.

SQL> insert into pat_race
  2    select 100, 'Asian' from dual union all
  3    select 200, 'Black' from dual union all
  4    select 300, 'White' from dual union all
  5    select 400, 'Other' from dual;

4 rows created.

SQL> insert into m_ethnicity values (100, 'Asian');

1 row created.

SQL>

Если вы используете такой запрос, результат в порядке:

SQL> select case when ml.ethnicity = 'Asian' then '[x]'
  2              when ml.ethnicity = 'White' then '[x]'
  3              when ml.ethnicity = 'Black' then '[x]'
  4              when ml.ethnicity = 'Other' then '[x]'
  5              else '[ ]'
  6         end res,
  7         pr.ethnicity
  8  from pat_race pr left join m_ethnicity ml on ml.ethnicity_id = pr.ethnicity_id;

RES                  ETHNICITY
-------------------- ----------
[x]                  Asian
[ ]                  Other
[ ]                  Black
[ ]                  White

SQL>

OK;Что делать, если выбрана другая этническая принадлежность (например, вставлено в таблицу):

SQL> insert into m_ethnicity values (300, 'White');

1 row created.

SQL> select case when ml.ethnicity = 'Asian' then '[x]'
  2              when ml.ethnicity = 'White' then '[x]'
  3              when ml.ethnicity = 'Black' then '[x]'
  4              when ml.ethnicity = 'Other' then '[x]'
  5              else '[ ]'
  6         end res,
  7         pr.ethnicity
  8  from pat_race pr left join m_ethnicity ml on ml.ethnicity_id = pr.ethnicity_id;

RES                  ETHNICITY
-------------------- ----------
[x]                  Asian
[x]                  White
[ ]                  Other
[ ]                  Black

SQL>

Выглядит нормально, то есть так, как вы этого хотите.

Теперь, если это не то, что вам нужно, предоставьте контрольный пример - не в качестве комментария, а путем редактирования исходного сообщения, которое вы отправили.

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