Syntaxfehler-MySQL?

Hi,
wir haben von der Communityedition zur Enterprise gewechselt. Nun wollten wir Pivot-Tabellen zu den bereits erstellten Reports hinzufügen. Bei vielen Report stosse ich aber immer wieder auf Fehler, bzw. Abbrüche, die “normalen” dynamischen Listen funktionieren aber.
Fehlermeldung: MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘! AND !2! GROUP BY rechnung_nummer_txt UNION S’ at line 25

Abfrage:
SELECT Monat, mwst_prozent,preisBrutto,preisNetto,Laender_Name2 Land, saleschannel, Zahlart
FROM
( SELECT Monat, mwst_prozent,sum(preis) preisBrutto, sum(round(preis/mwst_prozent,2)) preisNetto, Laender_Name2, saleschannel, Zahlart
FROM(
SELECT auftrag_mwst mwst_prozent,
auftrag_wert preis,rechnung_nummer_txt RE, Laender_Name2, DATE_FORMAT(rechnung_datum, “%Y-%m”) Monat, auftrag_versandkosten Versand, ver_auf_a_menge Menge,
IF(cs.shop_id IS NOT NULL, cs.shop_name, IF(eacc.ebay_accounts_id IS NOT NULL, eacc.ebay_accounts_username, channel.partner_name)) salesChannel,
za.zahlarten_name Zahlart
FROM shop.tbl_auftrag
INNER JOIN shop.tbl_verbindung_auftrag_artikel ON ver_auf_a_auftrag = auftrag_id
INNER JOIN wawi.tbl_rechnung on rechnung_herkunft_id=auftrag_id
INNER JOIN wawi.tbl_Laender on auftrag_l_land=Laender_ID
LEFT JOIN shop.tbl_kunden_btob_UstId ON auftrag_k_id = kunden_btob_UstId_kundenId
AND (kunden_btob_UstId_geloeschtAm IS NULL OR kunden_btob_UstId_geloeschtAm >= ver_auf_a_an_das_lager)
AND IF(auftrag_rechnungskorrektur IS NOT NULL, kunden_btob_UstId_gueltig_ab, kunden_btob_UstId_created) <= ver_auf_a_an_das_lager
AND kunden_btob_UstId_Land = Laender_Kuerzel
LEFT JOIN wawi.tbl_LaenderMWST ON LaenderMWST_LaenderKuerzel = Laender_Kuerzel
AND rechnung_datum BETWEEN LaenderMWST_DatumVon AND LaenderMWST_DatumBis
LEFT JOIN shop.tbl_zahlarten za ON auftrag_zahlart = za.zahlarten_id
LEFT JOIN shop.tbl_partner channel ON channel.partner_id = auftrag_partner
LEFT JOIN shop.countryshops cs ON cs.shop_id = auftrag_shop
LEFT JOIN shop.tbl_auftrag_EbayPos ebay ON ebay.auftrag_EbayPos_OrderLineItemID = ver_auf_a_Ref
LEFT JOIN plattformen.tbl_ebay_accounts eacc ON eacc.ebay_accounts_id = ebay.auftrag_EbayPos_account

         WHERE rechnung_herkunft = "shop" AND rechnung_datum BETWEEN ${Startdate} AND ${Enddate} 
         GROUP BY rechnung_nummer_txt
      UNION
      SELECT IF(Laender_MWSTgrenze > 0,
         IF(Laender_ID = 39, 1.19,
          IF(CHAR_LENGTH(Zinfo) > 5, 1,
           IF(LaenderMWST_MWST IS NULL, 1.19, LaenderMWST_MWST /100 +1))), 1) mwst_prozent,
         Gruppensumme preis, rechnung_nummer_txt RE,Laender_Name2, DATE_FORMAT(rechnung_datum, "%Y-%m") Monat, Versandkosten Versand, Menge,
         plattform salesChannel,
		 plattform Zahlart
         FROM   emailtexte_be.auktionsdaten
         INNER JOIN wawi.tbl_rechnung ON rechnung_herkunft_id=UID
         INNER JOIN  wawi.tbl_Laender on lland=Laender_afterbuy
         LEFT JOIN wawi.tbl_LaenderMWST ON LaenderMWST_LaenderKuerzel = Laender_Kuerzel
            AND rechnung_datum BETWEEN LaenderMWST_DatumVon AND LaenderMWST_DatumBis
         WHERE rechnung_herkunft = "ab" AND rechnung_datum BETWEEN ${Startdate} AND ${Enddate} 
         GROUP BY rechnung_nummer_txt
      ) qry
     GROUP BY Monat, Laender_Name2,mwst_prozent, salesChannel, Zahlart
   )
   qry_all

GROUP BY Monat, Land,mwst_prozent, salesChannel, Zahlart

Ein bisschen umfangreich, aber vielleicht hätte jemand eine Idee, woran es generell liegen kann?! Unsere Testphase läuft noch bis zum 31.3…Unsere Kaufentscheidung hängt natürlich davon ab, ob das funktioinieren kann, oder nicht.

Gruss,
Micha

Hallo Micha,

wie sieht die persistence.properties Datei aus?
Ist das die von reportserver-erstellte SQL-Abfrage oder die eigene Abfrage?

Viele Grüße,
Eduardo

Hallo Micha,
als erstes würde ich mal den “group by rechnung_nummer_txt” aus beiden Teilen des Unions herausnehmen. Was soll der bedeuten ?

Gruß Jan

@Eduardo: muss ich erst schauen, das sind eigene SQL Abfragen:-)
@Jan: dachte auch schon daran, werde das mal probieren…

file: persistence.properties

description: This file contains the database settings for ReportServer

Credentials

hibernate.connection.username=reportserver
hibernate.connection.password=*****

MySQL

hibernate.dialect=net.datenwerke.rs.utils.hibernate.MySQL5Dialect

hibernate.connection.driver_class=com.mysql.jdbc.Driver

hibernate.connection.url=jdbc:mysql://localhost:3306/reportserver

MariaDb

hibernate.dialect=net.datenwerke.rs.utils.hibernate.MariaDbDialect

hibernate.connection.driver_class=org.mariadb.jdbc.Driver

hibernate.connection.url=jdbc:mariadb://localhost:3306/reportserver

PostgreSQL

hibernate.dialect=net.datenwerke.rs.utils.hibernate.PostgreSQLDialect
hibernate.connection.driver_class=org.postgresql.Driver
hibernate.connection.url=jdbc:postgresql://localhost/reportserver

Oracle

hibernate.dialect=net.datenwerke.rs.utils.hibernate.Oracle10gDialect

hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver

hibernate.connection.url=jdbc:oracle:thin:@localhost:1521:reportserver

hibernate.default_schema=

SQL Server

hibernate.dialect=net.datenwerke.rs.utils.hibernate.SQLServer2008Dialect

hibernate.connection.driver_class=com.microsoft.sqlserver.jdbc.SQLServerDriver

hibernate.connection.url=jdbc:sqlserver://localhost;databaseName=reportserver

DB2

hibernate.dialect=net.datenwerke.rs.utils.hibernate.DB2Dialect

hibernate.connection.driver_class=com.ibm.db2.jcc.DB2Driver

hibernate.connection.url=jdbc:db2://localhost:50000/TEST

Connection pool settings.

Hibernate uses the C3P0 connection pool. The following properties allow to

configure C3P0 as used by Hibernate. Note that this does not have any effect

on the connection pool used by ReportServer for handling reporting.

If no changes are made here, then the default settings are active

hibernate.c3p0.acquire_increment=5

hibernate.c3p0.idle_test_period=60

hibernate.c3p0.timeout=3600

hibernate.c3p0.max_size=30

hibernate.c3p0.max_statements=0

hibernate.c3p0.min_size=5

mhhh, schon komisch, da wir eigentlich gegen eine MariaDB arbeiten…

ok, aber die interne DB scheint eine PostgreSQL Datenbank zu sein. Das kannst du im Admin->Datasources-> Internal datasources prüfen.. wie sieht die Konfiguration hier aus?

Gruss,
Eduardo

Yeap, hast recht, Denkfehler:-) Unsere Datenquelle ist ne Maria DB.
Ist genau das wie o.g. eingetragen.

Hallo,

oben steht nur die PostgreSQL Konfiguration, nicht die MariaDB Konfiguration, aber das ist nicht mehr wichtig, da du im reportserver gesehen hast, dass die interne DB PostgreSQL benutzt, und die (normale) Datenquelle MariaDB.

Hast du den Teil “group by rechnung_nummer_txt” herausgenommen?

Gruss,
Eduardo