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 

ここに画像の説明を入力

結果を 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

エラーが発生する

4

2 に答える 2

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
于 2013-05-31T06:02:42.877 に答える
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

または、MT.mkt_Area_ID、MA.mkt_Reg_ID、MT.year フィールドを SELECT 句から削除します。

 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
于 2013-05-31T06:10:30.160 に答える