![]() |
Datenbank: Firbird • Version: 2,5,5 • Zugriff über: IBO / IBExpert
Berechnungen per SQL
Hallo,
ich habe eine Tabelle Rechnung indem Gutschriften und Rechnungen gespeichert sind. Im Feld Belegart sind Rechnungen als 'GU' und Rechnen als 'RE'. Die Rechnungssumme oder Gutschriftssumme sind jeweils als positiver Wer gespeichert. Nun benötige ich den Rechnungsbetrag - Gutschriftsbetrag in einer Spalte. Mein Ansatz sieht so aus.
Delphi-Quellcode:
Ergebnis:
select Belegart, Rechnungsjahr as Behandlungsjahr,
cast(sum(Rechnungssumme) as Integer) as Summe from tbl_rechnung where Rechnungsjahr between :VonJahr and :BisJahr and ((Belegart = 'RE') or (Belegart = 'GU')) group by Belegart, Rechnungsjahr BELEGART BEHANDLUNGSJAHR SUMME GU 2.014 115 GU 2.017 34 RE 2.008 18.049 RE 2.009 48.023 RE 2.010 61.406 RE 2.011 51.508 RE 2.012 32.561 RE 2.013 52.201 RE 2.014 21.193 RE 2.015 4.701 RE 2.016 1.701 RE 2.017 21 Wie bekomme ich es hin das die Berechnung in einer Spalte stattfindet. Ergebnis sollte so aussehen: Belegjahr Ergebnis 2008 18.049 2009 48.023 2010 61.406 2011 51.508 2012 32.561 2013 52.201 2014 21.078 2015 4.701 2016 1.701 2017 -13 |
AW: Berechnungen per SQL
Eventuell sowas?
SQL-Code:
select Cast(Rechnungsjahr as VarChar) as Behandlungsjahr,
cast(sum(Rechnungssumme) as Integer) as Summe from tbl_rechnung where Rechnungsjahr between :VonJahr and :BisJahr and ((Belegart = 'RE') or (Belegart = 'GU')) group by Belegart, Rechnungsjahr |
AW: Berechnungen per SQL
Nein das bringt nichts. Es muss bei einer Gutschrift die Rechnungssumme * -1 berechnet werden.
|
AW: Berechnungen per SQL
SQL-Code:
select
Rechnungsjahr as Behandlungsjahr, (iif(Belegart = 'RE', cast(sum(Rechnungssumme) as Integer), 0) - iif(Belegart = 'GU', cast(sum(Rechnungssumme) as Integer),0)) as summe from tbl_rechnung where Rechnungsjahr between :VonJahr and :BisJahr and ((Belegart = 'RE') or (Belegart = 'GU')) group by Rechnungsjahr; |
AW: Berechnungen per SQL
Nur hingedaddelt, nicht getestet (mangels entsprechender Datenbank)
SQL-Code:
select Behandlungsjahr, RE - GU as Summe from
( select Cast(Rechnungsjahr as VarChar) as Behandlungsjahr, case Belegart when 'RE' then cast(sum(Rechnungssumme) as Integer) else 0 end as RE, case Belegart when 'GU' then cast(sum(Rechnungssumme) as Integer) else 0 end as GU from tbl_rechnung where Rechnungsjahr between :VonJahr and :BisJahr and Belegart in ('RE','GU') group by Belegart, Rechnungsjahr ) order by 1 |
AW: Berechnungen per SQL
Hallo nahpets
das Ergebnis Deiner SQL Abfrage ist: BEHANDLUNGSJAHR SUMME 2.008 18049 2.009 48023 2.010 61406 2.011 51508 2.012 32561 2.013 52201 2.014 21193 2.014 -115 2.015 4701 2.016 1701 2.017 21 2.017 -34 2014 und 2017 sollte aber in einer Zeile mit dem Ergebnis bei 2017 -13 sein. Ist aber schon ganz nah dran. Habe das Statement etwas geändert. Aus VarChar Integer gemacht, ansonsten kommt Fehler.
Delphi-Quellcode:
select Behandlungsjahr, RE - GU as Summe from
( select Cast(Rechnungsjahr as Integer) as Behandlungsjahr, case Belegart when 'RE' then cast(sum(Rechnungssumme) as Integer) else 0 end as RE, case Belegart when 'GU' then cast(sum(Rechnungssumme) as Integer) else 0 end as GU from tbl_rechnung where Rechnungsjahr between :VonJahr and :BisJahr and Belegart in ('RE','GU') group by Belegart, Rechnungsjahr ) order by 1 |
AW: Berechnungen per SQL
Hallo mkinzler,
Hier kommt der Fehler: Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause). |
AW: Berechnungen per SQL
Eventuell:
SQL-Code:
Mich stören halt die Tausenderpunkte in der Jahreszahl, geht das eventuell auch so?
select Behandlungsjahr, Sum(RE - GU) as Summe from
( select Cast(Rechnungsjahr as Integer) as Behandlungsjahr, case Belegart when 'RE' then cast(sum(Rechnungssumme) as Integer) else 0 end as RE, case Belegart when 'GU' then cast(sum(Rechnungssumme) as Integer) else 0 end as GU from tbl_rechnung where Rechnungsjahr between :VonJahr and :BisJahr and Belegart in ('RE','GU') group by Belegart, Rechnungsjahr ) group by Behandlungsjahr order by 1
SQL-Code:
select Behandlungsjahr, Sum(RE - GU) as Summe from
( select Cast(Rechnungsjahr as VarChar) as Behandlungsjahr, case Belegart when 'RE' then cast(sum(Rechnungssumme) as Integer) else 0 end as RE, case Belegart when 'GU' then cast(sum(Rechnungssumme) as Integer) else 0 end as GU from tbl_rechnung where Rechnungsjahr between :VonJahr and :BisJahr and Belegart in ('RE','GU') group by Belegart, Cast(Rechnungsjahr as VarChar) ) group by Behandlungsjahr order by 1 |
AW: Berechnungen per SQL
Zitat:
SQL-Code:
... cast(sum( iif(Belegart = 'RE', 0) - iif(Belegart = 'GU', 0)) as integer) as summe ...
|
AW: Berechnungen per SQL
Hallo nahpets,
erste Abfrage passt. Super vielen Dank an alle. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz