从Sybase转换到Netezza时遇到问题。在例子中,ill简化了SELECT。从Sybase转换Netezza GROUP BY子列
虽然这种选择的Sybase作品:
SELECT t1.col1,
CONVERT(CHAR(20), ymd(year(t1.date_col),month(t1.date_col),1) ,112)id_date,
CONVERT(CHAR(20), ymd(year(t1.date_col),month(t1.date_col),1) ,112) + 10000 id_date2,
SUM(t1.summ_col) summ_col
FROM test_table t1
GROUP BY t1.col1, id_date, id_date2
在Netezza同样的概念会说,date_col的必须在GROUP BY或aggragate功能。尽管列id_date和id_date2已被分组。
Netezza公司:
SELECT t1.col1,
TO_CHAR(ymd(year(t1.date_col),month(t1.date_col),1), 'YYYYMMDD') id_date,
TO_CHAR(ymd(year(t1.date_col),month(t1.date_col),1), 'YYYYMMDD') + 10000 id_date2,
SUM(t1.summ_col) summ_col
FROM test_table t1
GROUP BY t1.col1, id_date, id_date2
大多数RDMBS(MySQL是一个值得注意的例外)也会在您的查询中出错。其根本原因是数据库不知道每个组选择哪个_which_记录来获取'date_col'的值。真的,只有你知道这一点。如果您可以阐明您可能使用哪种逻辑为每个组选择一个“date_col”值,则有人可以帮助您重构查询。 –
根据ANSI SQL标准,您不允许在GROUP BY子句中仅放置列别名。 – jarlh
谢谢你们,Sybase似乎避免了各种规则 – hidross