我正在尝试从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;
任何人都可以帮忙。
提前致谢
答案 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,或者从选择列表中删除它们。
可能你应该从选择中删除,因为当你按年分组时,获得财政周或财政月是没有意义的。