如何将case语句与||一起使用SQL中的运算符?

问题描述 投票:0回答:1

任何人都可以帮助解释以下sql语句的含义吗?

FROM
  (
    CSA.X_INITIATED_BY_PSID
   ||
    CASE
      WHEN (SELECT USER_FULLNAME
        FROM TABLE_NAME
        WHERE USER_PSID = CSA.X_INITIATED_BY_PSID) IS NULL
      THEN \' - NA\'
      ELSE \' - \'
        ||
        (SELECT USER_FULLNAME
        FROM TABLE_NAME
        WHERE USER_PSID = CSA.X_INITIATED_BY_PSID
        )
    END INTITATED_BY
java sql oracle solr
1个回答
0
投票

这是FROM子句?我不这么认为。

如果您问它做什么,那么:它将CSA.X_INITIATED_BY_PSID列值与]连接在一起>

  • [table_name.user_fullname,如果有一行其USER_PSID等于先前提到的X_INITIATED_BY_PSID
  • NA,如果没有这样的行
  • 例如:

SQL> with
  2  -- sample data
  3  csa (x_initiated_by_psid) as
  4    (select 1 from dual union all
  5     select 2 from dual
  6    ),
  7  table_name (user_psid, user_fullname) as
  8    (select 1, 'Little' from dual
  9    )
 10  -- your query
 11  select c.x_initiated_by_psid ||' - '||
 12    case when (select t.user_fullname from table_name t
 13               where t.user_psid = c.x_initiated_by_psid
 14              ) is null then 'NA'
 15         else
 16              (select t.user_fullname from table_name t
 17               where t.user_psid = c.x_initiated_by_psid
 18              )
 19    end result
 20  from csa c;

RESULT
-------------------------------------------------
1 - Little
2 - NA

SQL>

尽管,这可能是过于复杂的解决方案,因为外部联接的工作量较小:

SQL> with
  2  -- sample data
  3  csa (x_initiated_by_psid) as
  4    (select 1 from dual union all
  5     select 2 from dual
  6    ),
  7  table_name (user_psid, user_fullname) as
  8    (select 1, 'Little' from dual
  9    )
 10  -- your query
 11  select c.x_initiated_by_psid ||' - '|| nvl(t.user_fullname, 'NA') result
 12  from csa c left join table_name t on t.user_psid = c.x_initiated_by_psid;

RESULT
-------------------------------------------------
1 - Little
2 - NA

SQL>

0
投票

您未指定表的结构,因此我使用了一个最小的示例:

© www.soinside.com 2019 - 2024. All rights reserved.