2013-05-31 42 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

如何I组的结果通过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

只需从select中删除不在group by语句中的额外列。删除'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

对于不在聚合函数(例如SUM,MAX,AVG)内的所有列,您应该始终使用GROUP BY。 把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 

或者从SELECT子句中删除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