2013-05-31 4 views
3

Я использую следующий запрос, чтобы получить результат, как показано ниже. На самом деле запрос просто соединяет 2 таблицы.Агрегат по объединенным таблицам

SELECT MT.mkt_Area_ID,MA.mkt_Reg_ID,MT.mktcate_id,MT.target_Amt,MT.year 
FROM [CRM].[tblMktArea_Target] MT JOIN CRM.tblMarketingArea MA 
ON MA.mkt_Area_ID= MT.mkt_Area_ID WHERE month IN (05,04) AND year=2013 AND MA.mkt_Area_ID=1 
AND MA.mkt_Reg_ID =1 

enter image description here

Как можно сгруппировать результаты по mktcate_id, чтобы получить сумму target_amt для каждой категории?

Я пробовал:

SELECT MT.mkt_Area_ID,MA.mkt_Reg_ID,MT.mktcate_id,Sum(MT.target_Amt),MT.year 
    FROM [CRM].[tblMktArea_Target] MT JOIN CRM.tblMarketingArea MA 
    ON MA.mkt_Area_ID= MT.mkt_Area_ID WHERE month IN (05,04) AND year=2013 AND MA.mkt_Area_ID=1 
    AND MA.mkt_Reg_ID =1 group by MT.mktcate_id 

и получать errror

+0

являются столбцами 'MT.mkt_Area_ID и MA.mkt_Reg_ID' важными в конечном наборе результатов? –

+0

Просто удалите лишние столбцы из списка, которые не указаны в операторе group. Удалите 'MT.mkt_Area_ID, MA.mkt_Reg_ID, MT.year' – Meherzad

+0

@Meherzad Мне нужен MT.mkt_Area_ID, MA.mkt_Reg_ID в результирующем наборе – Aparan

ответ

2

Вы получаете исключение, потому что необходимо добавить необобщенные столбцы в предложении GROUP BY. Пример,

SELECT MT.mkt_area_id, 
     MA.mkt_reg_id, 
     MT.mktcate_id, 
     SUM(MT.target_amt), 
     MT.year 
FROM [CRM].[TBLMKTAREA_TARGET] MT 
     JOIN CRM.TBLMARKETINGAREA MA 
     ON MA.mkt_area_id = MT.mkt_area_id 
WHERE month IN (05, 04) 
     AND year = 2013 
     AND MA.mkt_area_id = 1 
     AND MA.mkt_reg_id = 1 
GROUP BY MT.mktcate_id, 
      MT.mkt_area_id, 
      MA.mkt_reg_id, 
      MT.year 
1

Вы должны всегда GROUP BY на все столбцы, которые не являются в совокупности функций (таких как SUM, MAX, AVG). Помещенного MT.mkt_Area_ID, MA.mkt_Reg_ID, поля MT.year в GROUP BY предложения:

SELECT MT.mkt_Area_ID, 
      MA.mkt_Reg_ID, 
      MT.mktcate_id, 
      Sum(MT.target_Amt), 
      MT.year 
     FROM [CRM].[tblMktArea_Target] MT JOIN CRM.tblMarketingArea MA ON 
       MA.mkt_Area_ID = MT.mkt_Area_ID 
    WHERE month IN (05,04) AND 
      year = 2013 AND 
      MA.mkt_Area_ID = 1 AND 
      MA.mkt_Reg_ID = 1 
    GROUP BY MT.mktcate_id, 
      MT.mkt_Area_ID, 
      MA.mkt_Reg_ID, 
      MT.year 

Или удалить поля MT.mkt_Area_ID, MA.mkt_Reg_ID, MT.year из ЗЕЬЕСТА:

SELECT MT.mktcate_id, 
      Sum(MT.target_Amt) 
    FROM [CRM].[tblMktArea_Target] MT JOIN CRM.tblMarketingArea MA ON 
      MA.mkt_Area_ID = MT.mkt_Area_ID 
    WHERE month IN (05,04) AND 
      year = 2013 AND 
      MA.mkt_Area_ID = 1 AND 
      MA.mkt_Reg_ID = 1 
    GROUP BY MT.mktcate_id 
Смежные вопросы