解码功能SQL

时间:2019-03-13 16:18:52

标签: sql oracle

我的“种族”应用程序中有一个下拉字段,其中有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个逻辑,然后用作字母中的占位符。

现在种族字段从下拉列表更改为多选字段。

因此,在为单个患者的应用程序中选择多个种族时,我在下面的字母中得到了迷失方向的输出。

在选择2个种族时,输出如下:

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

在选择3个种族时,输出如下:

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

当选择多个值时,我需要具有以下输出:

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

1 个答案:

答案 0 :(得分:0)

您没有提供测试用例,所以我试图想象您所拥有的。这只是两个表的必要列集:

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>

如果使用这样的查询,则结果为OK:

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>

好;如果选择了其他种族(例如,将插入插入表格中)怎么办:

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>

看起来不错,即就像您想要的一样。

现在,如果这不是您所需要的,请-提供测试用例-而不是作为评论,而只需编辑您发布的初始消息即可。