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