我使用以下查询,以获得如下所示的结果。实际上查询只是加入了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
如何通过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
并得到错误
答案 0 :(得分: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 :(得分: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