【问题标题】:Trying to count number of complaint, cause, corrections试图计算投诉、原因、更正的数量
【发布时间】:2026-01-03 21:15:02
【问题描述】:

我正在尝试使用以下字段创建一个查询,用于计算数据中显示的投诉、原因和更正的数量。

我当前的错误:选择非聚合值必须是关联组的一部分。

我对 SQL 查询非常陌生,不确定我还缺少什么。我所做的一切都被合并到查询中,并且似乎遗漏了一些东西。

select L.Case_ID,
    L.Case_Line_ID,
    A.Dealer_ID,
    M.DealerCode,
    H.DealerName,
    substr(L.Estimate_Created_At,1,7) as CaseMonth,
    count(distinct L.Complaint) as Complaint,                 
    count(distinct C.Cause) as Cause,
    count(distinct C.Correction) as Correction
from     Decisiv_Tables_Prod.Stg_Decisiv_LineItems L
join     Decisiv_Tables_Prod.Stg_Decisiv_Cases A on L.Case_ID = A.Case_ID
join      Decisiv_Tables_Prod.Rpt_DecisivDealerMap M on A.Dealer_ID = M.DecisivDealerID
and cast(substr(L.Estimate_Created_At,1,10) as date format 'YYYY-MM-DD') between                                                                 M.EffectiveStartDate and coalesce(M.EffectiveEndDate, cast('2099-12-31' as date format 'YYYY-MM-DD'))
join Decisiv_Tables_Prod.Rpt_DealerDirectoryHierarchy H on  M.DealerCode = H.DealerCode                                                              
join Decisiv_Tables_Prod.Stg_Decisiv_LineItems_Clobs C on  C.Case_ID = L.Case_ID
and C.Case_Line_ID = L.Case_Line_ID
group by 1,2,3,4,5

希望得到一个包含以下数据示例的表:

经销商 ID、经销商代码、经销商名称、案例月份、Case_ID 计数、Case_Line_ID 计数、投诉计数、原因计数、纠正计数

【问题讨论】:

    标签: sql teradata


    【解决方案1】:

    您有六个未聚合的列:

    select L.Case_ID,
           L.Case_Line_ID,
           A.Dealer_ID,
           M.DealerCode,
           H.DealerName,
           substr(L.Estimate_Created_At,1,7) as CaseMonth,
    

    这些都应该在group by:

    group by L.Case_ID, L.Case_Line_ID, A.Dealer_ID,
             M.DealerCode, H.DealerName,
             substr(L.Estimate_Created_At,1,7) as CaseMonth
    

    【讨论】:

      【解决方案2】:

      正如 Gordon 所写,GROUP BY 列表与您的 Select 不匹配,您需要同时删除 Case_ID 和 Case_Line_ID 或聚合它们:

      SELECT
          A.Dealer_ID,
          M.DealerCode,
          H.DealerName,
          Substr(L.Estimate_Created_At,1,7) AS CaseMonth,
          Count(L.Case_ID),      -- distinct ?
          Count(L.Case_Line_ID), -- distinct ?
          Count(DISTINCT L.Complaint) AS Complaint,                 
          Count(DISTINCT C.Cause) AS Cause,
          Count(DISTINCT C.Correction) AS Correction
      FROM     Decisiv_Tables_Prod.Stg_Decisiv_LineItems AS L
      JOIN     Decisiv_Tables_Prod.Stg_Decisiv_Cases AS A
        ON L.Case_ID = A.Case_ID
      JOIN     Decisiv_Tables_Prod.Rpt_DecisivDealerMap AS M
        ON A.Dealer_ID = M.DecisivDealerID
       AND Cast(Substr(L.Estimate_Created_At,1,10) AS DATE FORMAT 'YYYY-MM-DD') BETWEEN M.EffectiveStartDate AND Coalesce(M.EffectiveEndDate, DATE '2099-12-31')
      JOIN Decisiv_Tables_Prod.Rpt_DealerDirectoryHierarchy AS H
        ON  M.DealerCode = H.DealerCode                                                              
      JOIN Decisiv_Tables_Prod.Stg_Decisiv_LineItems_Clobs AS C
        ON  C.Case_ID = L.Case_ID
       AND C.Case_Line_ID = L.Case_Line_ID
      GROUP BY 
          A.Dealer_ID,
          M.DealerCode,
          H.DealerName,
          CaseMonth
      

      我将cast('2099-12-31' as date format 'YYYY-MM-DD') 简化为DATE '2099-12-31',并在Group By 中使用了列名/别名(建议在生产代码中使用超过1、2、3、4)。

      由于 Distinct 非常昂贵,请检查您是否真的需要将其添加到这些计数中。

      【讨论】:

        最近更新 更多