Ich stieß auf ein Problem bei der Konvertierung von Sybase nach Netezza. Im Beispiel wird das SELECT vereinfacht.Netezza GROUP BY Sub-Spalte Konvertierung von Sybase
Während dieser Sybase ausgewählter Werke:
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
Das gleiche Konzept auf Netezza wird sagen, dass date_col in GROUP BY oder in aggragate Funktion sein muss. Trotz der Tatsache, dass die Spalten id_date und id_date2 bereits gruppiert sind.
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
Die meisten RDMBS (MySQL ist eine bemerkenswerte Ausnahme) würde auch bei Ihrer Abfrage Fehler aus. Der Grund dafür ist, dass die Datenbank _which_ record nicht kennt, um einen Wert für "date_col" für jede Gruppe zu erhalten. Wirklich, nur du weißt das. Wenn Sie artikulieren können, welche Logik Sie verwenden könnten, um einen "date_col" -Wert für jede Gruppe zu wählen, kann Ihnen jemand helfen, die Abfrage umzuformen. –
Gemäß dem ANSI-SQL-Standard dürfen Sie keine Spaltenaliasnamen in die GROUP BY-Klausel aufnehmen, sondern nur Spalten. – jarlh
Danke Jungs, Sybase scheint alle Arten von Regeln zu vermeiden – hidross