2016-09-07 19 views
0

SQL Serverの2つのテーブルからデータを抽出しようとしています。以下のクエリは「group by」を使用して完全に実行されますが、b.catdescとa.fiscal_年でデータをグループ化しようとすると、以下のエラーが表示されます。SQLグループby by joined tables

エラー:[IBM] [システムiアクセスODBCドライバー] [DB2 for i5/OS] SQL0122 - COUNTRY_CODE列またはSELECTリストの式が無効です。 エラー コード:-122 レポートユーザー

SELECT a.country_code, 
a.book, 
b.catunitdesc, 
b.catdesc, 
b.csku_cc, 
sum(a.gross_sales), 
a.fiscal_year, 
a.fiscal_week, 
a.fiscal_month, 
sum(a.gross_costs), 
sum(a.net_sales), 
sum(a.net_costs), 
sum(a.qty_shipped_gross), 
sum(a.qty_shipped_net) 

FROM essv11.eudmeas2 a 
join essv11.eudmp1 b 
on a.sku_cc = b.sku_cc 

WHERE book = 'G21-2014' 
OR book = 'G21-2015' 
OR book = 'G21-2016' 
AND Country_code ='GB' 
GROUPED BY b.catdesc, a.fiscal_year; 

誰が助けてください。事前

+0

のシリーズよりも優れているあなたは、「SQL Serverの」と言うが、あなたが投稿エラーがIBMのDB2データベースではなく、SQL ServerデータベースへのODBCドライバです。 SQL Serverは "GROUP BY"ではなく "GROUP BY"を使用します。 – rmcsharry

答えて

2

集計されていないすべての列をGROUP BYに含める必要があります。私がお勧めします:

SELECT a.country_code, a.book, b.catunitdesc, b.catdesc, b.csku_cc, 
     sum(a.gross_sales), 
     a.fiscal_year, a.fiscal_week, a.fiscal_month, 
     sum(a.gross_costs), 
     sum(a.net_sales), 
     sum(a.net_costs), 
     sum(a.qty_shipped_gross), 
     sum(a.qty_shipped_net) 
from essv11.eudmeas2 a join 
    essv11.eudmp1 b 
    on a.sku_cc = b.sku_cc 
where book in ('G21-2014', 'G21-2015', 'G21-2016') and 
     Country_code = 'GB' 
group by a.country_code, a.book, b.catunitdesc, b.catdesc, b.csku_cc, 
     a.fiscal_year, a.fiscal_week, a.fiscal_month; 

注:

  • group byは、すべての非集計列があります。
  • IN=/or
+0

INは間違いなくよりエレガントです(人為的なエラーが起こりにくい)。しかし、パフォーマンス上の利点はありますか? – Strawberry

+0

@Strawberry。 。 。この場合、おそらくOPのクエリに論理的な問題が修正されます。パフォーマンスは、正しいロジックを書くことに二次的なものになります。 –

0

選択リスト上のすべての要素で

おかげでどちらかSUMなどの関数から来なければならない、またはGROUP BYリスト上にある必要があります。 最初の選択(country_code)がGROUP BYにないため、データベースにエラーが報告されます。

GROUP BYにa.country_code、a.book、b.catunitdesc、b.csku_cc、a.fiscal_week、a.fiscal_monthを追加することも、選択リストから削除することもできます。

おそらくあなたは、年度別にグループ化している会計年度または会計月を取得することは意味がないため、選択肢から削除する必要があります。