Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 联接表上的聚合_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 联接表上的聚合

Sql 联接表上的聚合,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我使用下面的查询来获得如下所示的结果。实际上,查询只是连接两个表 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.mk

我使用下面的查询来获得如下所示的结果。实际上,查询只是连接两个表

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对结果进行分组,以获得每个类别的目标金额之和

我试过:

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

和getting error

您将得到一个异常,因为有必要在
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

您应该始终对不在聚合函数(如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
或从SELECT子句中删除MT.mkt\U Area\U ID、MA.mkt\U Reg\U 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

MT.mkt_Area_ID和MA.mkt_Reg_ID
在最终结果集中是否重要?只需从select中删除group by语句中不包含的额外列即可。删除
MT.mkt\u区域ID,MA.mkt\u注册ID,MT.year
@Meherzad我需要结果中的MT.mkt\u区域ID,MA.mkt\u注册IDset@JW웃 对我需要他们的结果