lorderich
Goto Top

MYSQL 8 und SUM and Join erzeugt falsche Ergebnisse

Hallo zusammen,

ich versuche mittels eines Select eine Aggregierung einer Datenbanktabelle zu erzeugen.

Dabei ist jedoch auffällig, dass in unterschiedlichen Zeiträumen unterschiedliche Ergebnisse herauskommen, auch wenn sich an den darunter liegenden Daten nichts geändert hat.

Ich verwende hierfür das folgende Statement:
       SELECT 
        `03_table`.`accounting`.`Year` AS `Year`,
        `03_table`.`accounting_class`.`DE_FinancialName` AS `DE_FinancialName`,
        SUM( (CASE
            WHEN (`03_table`.`accounting_type`.`Accounting_Type_Short_Code` = 'IN') THEN `03_table`.`accounting`.`Amount`  
        END)) AS `IN`,
        SUM( (CASE
            WHEN (`03_table`.`accounting_type`.`Accounting_Type_Short_Code` = 'OU') THEN `03_table`.`accounting`.`Amount`  
        END)) AS `OU`,
        SUM( (CASE
            WHEN (`03_table`.`accounting_type`.`Accounting_Type_Short_Code` = 'PR') THEN `03_table`.`accounting`.`Amount`  
        END)) AS `PR`,
        SUM((CASE
            WHEN (`03_table`.`accounting_type`.`Accounting_Type_Short_Code` = 'CR') THEN `03_table`.`accounting`.`Amount`  
        END)) AS `CR`
    FROM
        ((((`03_table`.`accounting`
        )
        LEFT JOIN `03_table`.`accounting_type` ON ((`03_table`.`accounting`.`Accounting_Type` = `03_table`.`accounting_type`.`UUID`)))
        LEFT JOIN `03_table`.`accounting_class` ON ((`03_table`.`accounting`.`Accounting_Class` = `03_table`.`accounting_class`.`UUID`)))
)
    GROUP BY `03_table`.`accounting`.`Year` , `03_table`.`accounting_class`.`DE_FinancialName`
    ORDER BY `03_table`.`accounting`.`Year` DESC

Hat jemand eine Idee, woher dieses Verhalten kommt?

Content-Key: 591204

Url: https://administrator.de/contentid/591204

Printed on: April 25, 2024 at 16:04 o'clock

Member: it-frosch
it-frosch Jul 28, 2020 at 05:31:44 (UTC)
Goto Top
Hallo Loderich,

die Query sieht für mich erst einmal stimmig aus, auch wenn ich aus der MS SQL Ecke komme.

Ich würde mal prüfen ob 03_table.accounting_type.Account.Accounting_Typ_Short_Code noch anderen Werte
außer den in der Query abgefragten gibt. Falls es NULL Werte gibt, wäre das eine Fehlerquelle, da du diese in den CASE Abfragen nicht abfängst.


Grüße vom it-frosch
Member: Lorderich
Lorderich Jul 28, 2020 at 15:56:20 (UTC)
Goto Top
SELECT
`accounting`.`Year` AS `Year`,
`accounting_class`.`DE_FinancialName` AS `DE_FinancialName`,
`accounting_class`.`DE_FinancialName` AS `EN_FinancialName`,
SUM((CASE WHEN (`accounting_type`.`Accounting_Type_Short_Code` = 'IN') THEN `accounting`.`Amount` END)) AS `IN`,
SUM((CASE WHEN (`accounting_type`.`Accounting_Type_Short_Code` = 'OU') THEN `accounting`.`Amount` END)) AS `OU`,
SUM((CASE WHEN (`accounting_type`.`Accounting_Type_Short_Code` = 'PR') THEN `accounting`.`Amount` END)) AS `PR`,
SUM((CASE WHEN (`accounting_type`.`Accounting_Type_Short_Code` = 'CR') THEN `accounting`.`Amount` END)) AS `CR`
FROM
((`accounting`
LEFT JOIN `accounting_type` ON ((`accounting`.`Accounting_Type` = `accounting_type`.`UUID`)))
LEFT JOIN `accounting_class` ON ((`accounting`.`Accounting_Class` = `accounting_class`.`UUID`)))
GROUP BY `accounting`.`Year` , `accounting_type`.`Accounting_Type_Short_Code` , `accounting_class`.`DE_FinancialName`
ORDER BY `accounting`.`Year` DESC