【问题标题】:CONCAT values in specific cells based off values in a different column特定单元格中的 CONCAT 值基于不同列中的值
【发布时间】: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

提前谢谢你!

enter image description here

【问题讨论】:

  • 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


【解决方案1】:

您正在尝试将多行合并为一,因此您需要一个聚合函数。对于连接文本,这是LISTAGG。你说得很对:

select id_number, last_name, first_name, date_of_birth, customer_since
       listagg( trim( remark_texts ), ' ' ) within group ( order by remarks_seq_nbr )
           as customers
  from customer_current
 group by id_number, last_name, first_name, date_of_birth, customer_since
 order by id_number

我正在修剪文本并使用空格作为分隔符,所以你不会以CUSTOMER PREFERS DONOT CALL结束。

【讨论】:

    猜你喜欢
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多