Попытка подсчитать количество жалоб, причины, исправления - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь создать запрос со следующими полями, который подсчитывает количество жалоб, причин и исправлений, отображаемых в данных.

Моя текущая ошибка: выбор неагрегированных значений должен быть частьюсвязанной группы.

Я очень плохо знаком с запросами 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 голосов
/ 22 января 2019

Как писал Гордон, список 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 довольно дорогой, проверьте, действительно ли вам нужно добавить его к этим подсчетам.

0 голосов
/ 22 января 2019

У вас есть шесть неагрегированных столбцов:

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
...