gpt4 book ai didi

sql - 在 XMLAGG 中对重复记录使用 distinct

转载 作者:行者123 更新时间:2023-12-02 01:14:28 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com