试图计算投诉,原因,更正的数量

时间:2019-01-22 02:35:39

标签: sql teradata

我正在尝试使用以下字段创建查询,该查询计算数据中出现的投诉,原因和更正的数量。

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

我对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计数,投诉计数,原因计数,更正计数

2 个答案:

答案 0 :(得分:0)

您有六个未汇总的列:

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

答案 1 :(得分:0)

正如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相当昂贵,请检查您是否真的需要将其添加到这些计数中。