從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