【发布时间】:2021-12-18 21:34:19
【问题描述】:
我需要提前帮助和道歉,因为我不知道从哪里开始。
我是一名报告分析师,我有一张充满客户数据 + 客户评论的表格。需要联系客服备注,想不出办法。
我的表格有 7 列,在将报告发送给我们的内部客户之前,我需要连接 REMARK_TEXTS 行。
备注基于 REMARKS_SEQ_NBR 列和与 REMARK TEXTS 对齐的序列号。我附上了我创建的 excel 模型的屏幕截图。
这是我使用 LISTAGG() 的查询:
SELECT DISTINCT
AA.ID_NUMBER,
AA.LAST_NAME,
AA.FIRST_NM,
AA.DATE_OF_BIRTH,
AA.CUSTOMER_SINCE,
AA.REMARKS_SEQ_NBR
LISTAGG(‘REMARK_TEXTS’
) WITHIN GROUP (
AA.ID_NUMBER
)
AS CUSTOMERS
FROM CUSTOMER_CURRENT
GROUP BY ID_NUMBER
ORDER BY ID_NUMBER
提前谢谢你!
【问题讨论】:
-
minimal reproducible example 在询问 SQL 问题时是一个很好的开始。并将示例数据和预期结果都包含为格式化文本(无图像,无链接)。
-
如果总长度在限制范围内(或可以截断),您也许可以使用由 seq_nbr 排序的
listagg()。但如果没有明确的数据和结果(如文本),就很难确定。 -
您可能还必须列出您的
remarks_ses_nbr或删除您的remarks_ses_nbr。只要按原样保留在 SELECT 中,您就不会聚合记录(假设remarks_seq_nbr是记录唯一性的一部分。 -
您添加的代码存在很多问题 - 缺少逗号、错误的引号(尽管根本不需要)、分组方式不匹配非聚合选择列表列、listagg 中没有排序。 . 如果您按要求提供文本样本数据和结果,我们可以运行查询并告诉您如何让它做您想做的事。 (您可能还需要考虑规范化您的数据 - 如果您必须将备注拆分为多行,它们可能应该位于单独的表中,仅通过 ID 链接。)
-
点赞
SELECT id_number, last_name, first_nm, date_of_birth, customer_since, LIST_AGG(Remark_Texts) WITHIN GROUP (ORDER BY remarks_seq_nbr) as remarks FROM CUSTOMERS GROUP BY id_number, last_name, first_nm, date_of_birth, customer_since ORDER BY id_number;
标签: sql oracle string-concatenation