【问题标题】:String concatenation after DISTINCT result selected选择 DISTINCT 结果后的字符串连接
【发布时间】:2021-11-03 07:32:13
【问题描述】:

我有以下查询:

SELECT xmlagg(xmlparse(content RESULTS || '|' wellformed) ORDER BY RESULTS).getclobval() AS RESULTS 
FROM
(
  SELECT distinct ' '   || result|| ' - '   || result_final || ' xxx' as RESULTS from myTable where ID = '123456'
);

目前“xxx”会附加在每个result_final的末尾,如何连接到查询的最后一个字符串的最开始?

' xxx'|| RESULTS 

如果有条件,上述连接只应在 result=x 时发生,否则只应打印 RESULTS。

【问题讨论】:

  • 在外部查询中做吗?

标签: oracle distinct nsxmlparser


【解决方案1】:

将该字符串移到“结果”前面而不是后面。

不过,由于应满足附加条件,请使用您当前的查询(不带“xxx”)作为子查询并通过CASE 应用条件。

使用虚拟样本数据:

SQL> DESC mytable
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 RESULT                                             CHAR(1)
 RESULT_FINAL                                       CHAR(1)
 ID                                                 CHAR(6)

SQL> SELECT * FROM mytable;

R R ID
- - ------
x y 123456

SQL> SELECT CASE
  2            WHEN TO_CHAR (results) = 'x' THEN ' xxx' || results
  3            ELSE results
  4         END AS results
  5    FROM (SELECT XMLAGG (XMLPARSE (CONTENT RESULTS || '|' WELLFORMED)
  6                         ORDER BY RESULTS).getclobval () AS RESULTS
  7            FROM (SELECT DISTINCT
  8                         ' ' || result || ' - ' || result_final AS RESULTS
  9                    FROM myTable
 10                   WHERE ID = '123456'));

RESULTS
--------------------------------------------------------------------------------
 x - y|

SQL>

【讨论】:

  • 谢谢,第一行出现错误 ORA-00904: "RESULTS": invalid identifier
  • 你不应该,因为第一行的“results”只使用了第三行的“results”别名。
  • 谢谢,它是我解决方案的一部分,让我们举一个更好的例子,我的条件是 WHEN results LIKE '%Duplicate%' THEN 'xxx' ||结果但我不希望从内部查询中选择“%Duplicate%”,外部查询中的“结果”应自动丢弃任何“%Duplicate%”,并在字符串前面与“xxx”连接。
猜你喜欢
  • 2010-11-20
  • 2023-04-01
  • 2015-03-31
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多