- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 sql 中使用 XMLAGG 时遇到问题。
我有一个包含多个记录的表,这些记录可以重复。该表包含客户地址和客户名称。
Create Table cust_data(
cust_name varchar2(30),
cust_addr_line1 varchar2(300),
cust_addr_line2 varchar2(300),
cust_addr_line3 varchar2(300),
cust_addr_type varchar2(3));
该表可能包含单个客户名称和不同地址类型的多条记录。
此外,单个客户也可能有多个相同类型的地址。
所以客户可能有这样的地址
cust1 address1 curr_address
cust1 address2 old_address
cust1 address3 old_address
cust1 address4 old_address
cust2 address5 curr_address
cust2 address6 old_address
我有一个选择,我想以逗号分隔格式取出所有带有旧地址的客户名称。
使用与我使用的相同的 sql
select XMLAGG(XMLELEMENT(E, cust_name || ',')).EXTRACT('//text()')
from cust_data where cust_addr_type ='old_address';
我得到以下输出:
cust1,cust1,cust1,cust2,
如何得到输出为
cust1,cust2
请帮忙。
编辑#1:
其他表可以这样取:
Create Table cust_info(
cust_name varchar2(30),
Cust_account varchar2(300),
cust_amount_paid varchar2(300),
cust_amount_pend varchar2(300),
cust_payment_type varchar2(300));
Create Table payment_master_info(
pmnt_type varchar2(30),
pmnt_desc varchar2(300),
pmnt_rate varchar2(300),
pmnt_tenure varchar2(300));
查询是这样的:
SELECT XMLAGG(XMLELEMENT(E, CUST_NAME || ',')) .EXTRACT('//text()'),
CD.CUST_ADDR_LINE1,
CD.CUST_ADDR_LINE2,
CD.CUST_ADDR_LINE3,
CI.CUST_AMOUNT_PAID,
CI.CUST_AMOUNT_PEND,
CI.CUST_ACCOUNT
FROM CUST_INFO CI, PAYMENT_MASTER_INFO PM, CUST_DATA CD
WHERE CD.CUST_NAME = CI.CUST_NAME
AND CI.CUST_PAYMENT_TYPE = PM.PMNT_TYPE
AND CUST_ADDR_TYPE = 'old_address';
现在的数据这么庞大。 pmnt_type中的数据范围为10000-15000个数据在其他表中,它的范围是 2100000-5000000
如果我对不同的数据应用内部查询,性能会呈指数级下降。
还有其他办法吗?
编辑#2:同样在使用这个内部查询时,在执行过程中,我得到了一个 ORA-19011(: Character string buffer too small.) 错误。有什么理由可以……??
最佳答案
您可以在内部查询中使用 DISTINCT:
SQL> select XMLAGG(XMLELEMENT(E, cust_name || ',')).EXTRACT('//text()')
2 from (SELECT distinct cust_name, cust_addr_type FROM cust_data)
3 where cust_addr_type ='old_address';
XMLAGG(XMLELEMENT
-----------------
cust1,cust2,
关于sql - 在 XMLAGG 中对重复记录使用 distinct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13306144/
我正在使用 Oracle 数据库 11g 企业版 11.2.0.4.0 版 - 64 位生产 我们用 XMLAGG() 替换了 LISTAGG() 以避免连接错误。当我从两个函数输出中检查字符的长度时
使用 Oracle 11.2 我试图从下表中选择 2 个分组列表,这是我的代码: CREATE TABLE tmp_main AS ( SELECT rownum col1, 'txt_' ||
我想要相当于 DB2 中 MySql 的 GROUP_CONCAT 功能。 我尝试过 DB2 的 XML Aggrigate 函数来合并 murows。 SELECT a.ID, sub
我正在尝试将 A 聚合到字典列表中。甲骨文的LISTAGG()有效,但确实遇到了 4k 最大字符限制。我尝试过 XMLAGG但现在我得到了“和”代替 ””。请提出解决此问题的最佳方法。 XMLCAST
我在 sql 中使用 XMLAGG 时遇到问题。 我有一个包含多个记录的表,这些记录可以重复。该表包含客户地址和客户名称。 Create Table cust_data( cust_name
这个问题已经有答案了: XMLAGG with RTRIM issue (2 个回答) 已关闭 7 年前。 我在oracle中执行以下查询,出现以下错误 ORA-19011 : Character s
目前我有以下查询: SELECT CASE WHEN ('[Param.3]' = 'SELECTED') THEN (SELECT RTRIM(XMLELE
我正在尝试将 A 聚合到字典列表中。甲骨文的LISTAGG()有效,但确实遇到了 4k 最大字符限制。我尝试过 XMLAGG但现在我得到了“和”代替 ””。请提出解决此问题的最佳方法。 XMLCAST
我在 sql 中使用 XMLAGG 时遇到问题。 我有一个包含多个记录的表,这些记录可以重复。该表包含客户地址和客户名称。 Create Table cust_data( cust_name
我得到了这个 SQL 查询: select rtrim(extract(xmlagg(xmlelement(e, column_name || ',')), '/E/te
我有一个函数,它使用一些数据的 xmlaggs 调用多个表/ View 等。 出于某种原因,当我提取附加信息时,我的性能得到了提高,即使这些附加信息没有用于代码的其余部分(例如再次使用的键值的索引)。
我正在使用以下查询来生成数据的 XML 表示形式。我希望输出像常规 XML 格式一样被识别。相反,我收到一个连续的字符串。我尝试在我的选择语句中附加 CHR(13)||Chr(10),但我没有得到正确
我是一名优秀的程序员,十分优秀!