You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Teradata SQL:如何生成唯一客户列并实现数据聚合查询?

Teradata实现按PART_NO分组聚合并生成唯一客户列表

针对你的需求,原查询报错有两个核心原因:一是Teradata的LISTAGG对CHAR类型列支持有限,需要显式转换为VARCHAR;二是未对客户去重,会导致列表出现重复客户(若表中有重复记录)。以下是可行的解决方案:

方案一:先去重客户再关联聚合

适用于所有Teradata版本,先提取每个PART_NO对应的唯一客户,再和汇总数据关联:

WITH unique_customer AS (
    SELECT DISTINCT PART_NO, CUSTOMER
    FROM table_name
),
part_summary AS (
    SELECT 
        PART_NO,
        SUM(QTY) AS QTY,
        COUNT(DISTINCT CUSTOMER) AS CUST_CNT
    FROM table_name
    GROUP BY PART_NO
)
SELECT 
    ps.PART_NO,
    ps.QTY,
    ps.CUST_CNT,
    LISTAGG(uc.CUSTOMER, ',') WITHIN GROUP (ORDER BY uc.CUSTOMER) AS CUST_LIST
FROM part_summary ps
JOIN unique_customer uc ON ps.PART_NO = uc.PART_NO
GROUP BY ps.PART_NO, ps.QTY, ps.CUST_CNT;

方案二:使用DISTINCT LISTAGG(Teradata 16.20+)

如果你的Teradata版本在16.20及以上,支持LISTAGG(DISTINCT)语法,可以直接简化查询:

SELECT 
    PART_NO,
    SUM(QTY) AS QTY,
    COUNT(DISTINCT CUSTOMER) AS CUST_CNT,
    LISTAGG(DISTINCT CAST(CUSTOMER AS VARCHAR(100)), ',') WITHIN GROUP (ORDER BY CUSTOMER) AS CUST_LIST
FROM table_name
GROUP BY PART_NO;

错误细节说明

  • [3706]语法错误:因为CUSTOMER列大概率是CHAR类型,Teradata的LISTAGG对该类型兼容性差,转换为VARCHAR即可解决。
  • 原查询未处理重复客户:若表中同一PART_NO下存在重复的CUSTOMER记录,会导致CUST_LIST出现重复值,通过DISTINCT去重后才能符合需求。

内容的提问来源于stack exchange,提问作者user21077255

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 14:52:58