2016-07-07 64 views
1

從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_dateid_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 
+1

大多數RDMBS(MySQL是一個值得注意的例外)也會在您的查詢中出錯。其根本原因是數據庫不知道每個組選擇哪個_which_記錄來獲取'date_col'的值。真的,只有你知道這一點。如果您可以闡明您可能使用哪種邏輯爲每個組選擇一個「date_col」值,則有人可以幫助您重構查詢。 –

+1

根據ANSI SQL標準,您不允許在GROUP BY子句中僅放置列別名。 – jarlh

+0

謝謝你們,Sybase似乎避免了各種規則 – hidross

回答

2

我想這是你想要的。在派生表中執行to_char的東西。它的結果做GROUP BY

select col1, id_date, id_date2, SUM(summ_col) summ_col 
from 
(
    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, 
      t1.summ_col 
    FROM test_table t1 
) dt 
GROUP BY col1, id_date, id_date2 
+0

非常感謝。這似乎工作得很好。 Sybase似乎允許許多通常不被允許的事情。 – hidross