SQL组在连接表中

时间:2016-09-07 16:14:11

标签: sql-server

我正在尝试从SQL服务器的两个表中提取数据。下面的查询运行完全没有“分组依据”,但是当我尝试按b.catdesc和a.fiscal_ year对数据进行分组时,它会显示以下错误。

错误:[IBM] [System i Access ODBC Driver] [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;

任何人都可以帮忙。

提前致谢

2 个答案:

答案 0 :(得分:2)

您需要在makeSelectable中包含所有非聚合列。我建议:

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 / =

答案 1 :(得分:0)

选择列表中的所有元素必须来自SUM等函数,或者必须位于GROUP BY列表中。 您的第一个选择(country_code)不在GROUP BY上,使数据库报告该错误。

您可以将a.country_code,a.book,b.catunitdesc,b.csku_cc,a.fiscal_week,a.fiscal_month添加到GROUP BY,或者从选择列表中删除它们。

可能你应该从选择中删除,因为当你按年分组时,获得财政周或财政月是没有意义的。