![]() |
Datenbank: Paradox • Version: 7? • Zugriff über: Tquery / Local SQL
NVL, NZ - aber was in Local SQL unter Paradox?
Hallo zusammen
Ich verwende Paradox für eine grössere Applikation. Dabei habe ich das Problem nicht existierender Werte, (Z.B. Rechnungen ohne Zahlungen) möchte aber trotzdem Berechnungen damit durchführen. In ORACLE gibt's für diesen Zweck die Funktion NVL, in ACCESS die Funktion NZ. Welche Möglichkeit existiert für Local SQL unter Paradox ? Vielleicht auch Work around ? Grüsse und besten Dank für Ideen. |
Re: NVL, NZ - aber was in Local SQL unter Paradox?
Zitat:
Zitat:
Zitat:
SQL-Code:
select null+1
|
Re: NVL, NZ - aber was in Local SQL unter Paradox?
:gruebel: die Frage hab ich doch schonmal gelesen :mrgreen:
probier mal:
SQL-Code:
SELECT Rechnungen.Betrag – Zahlungen.Betrag AS Restbetrag
WHERE Zahlungen.Betrag IS NOT NULL UNION SELECT Rechnungen.Betrag AS Restbetrag WHERE Zahlungen.Betrag IS NULL |
Re: NVL, NZ - aber was in Local SQL unter Paradox?
Hallo zusammen
Mit Grösse der Applikation meine ich: ich möchte die Appl. vorderhand nicht auf eine andere Datenbank (jetzt PARADOX) umschreiben, obwohl ich langsam aber sicher genug von PARADOX habe. Es geht um etwas ganz einfaches, nämlich die Bestimmung des noch zu bezahlenden Betrages von Rechnungen bei mehreren Teilzahlungen (auch 0). Im folgenden nun eine Abfrage wie sie unter ACCESS läuft:
SQL-Code:
Wird die Funktion NZ durch NVL ersetzt, ist die Abfrage wahrscheinlich auch unter ORACLE lauffähig.
SELECT Rechnungen.Rechnungsnummer, Rechnungen.Betrag, Sum(NZ([Zahlungen].[Betrag],0)) AS [Summe Zahlungen], [Rechnungen].[Betrag]-Sum(NZ([Zahlungen].[Betrag],0)) AS Restbetrag
FROM Rechnungen LEFT JOIN Zahlungen ON Rechnungen.Rechnungsnummer = Zahlungen.Rechnungsnummer GROUP BY Rechnungen.Rechnungsnummer, Rechnungen.Betrag; In PARADOX bedeutet NULL wirklich nicht vorhanden/definiert und wird nicht als 0 interpretiert. Nun die Idee mit dem UNION funktioniert tatsächlich, wenn auch sehr umständlich:
SQL-Code:
Nun dies ist Mal eine Lösung. Der erste SELECT in der UNION wird recht schnell ausgeführt, der zweite
SELECT Rechnungen.Rechnungsnummer, Rechnungen.Betrag, SUM(Zahlungen.Betrag) AS ZSum,
Rechnungen.Betrag - SUM(Zahlungen.Betrag) AS Restbetrag FROM Rechnungen, Zahlungen WHERE (Rechnungen.Rechnungsnummer = Zahlungen.Rechnungsnummer) GROUP BY Rechnungen.Rechnungsnummer, Rechnungen.Betrag UNION SELECT Rechnungen.Rechnungsnummer, Rechnungen.Betrag, 0, Rechnungen.Betrag FROM Rechnungen WHERE NOT EXISTS (SELECT Zahlungen.Rechnungsnummer FROM Zahlungen WHERE (Rechnungen.Rechnungsnummer = Zahlungen.Rechnungsnummer)) ORDER BY Rechnungen.Rechnungsnummer ist leider furchtbar langsam. Ich kenne den Grund nicht, vielleicht hat jemand eine Idee. Für Zahlungen.Rechnungsnummer ist kein Index vorhanden ?? Ich kann mir vorstellen, dass man den 2. Select noch umschreiben kann (aus dem ersten abgeleitet) und damit auf eine wesentlich schnellere Implementation erreicht. Bin für Anregungen weiterhin dankbar. Gruss Ticino |
Re: NVL, NZ - aber was in Local SQL unter Paradox?
Evtl. lässt sich mit COUNT etwas anstellen, denn im einen Fall ist COUNT(Zahlungen.Rechnungsnummer) = 0.
|
Re: NVL, NZ - aber was in Local SQL unter Paradox?
Habe eine komplizierte Lösung gefunden und werde sie später hier veröffentlichen.
Beim weiteren Ausbau der SQL-Abfrage bin ich aber auf neue Probleme gestossen und werde vorerst nach neuen Wegen suchen. => Gestaffelte SQL-Abfragen Vorerst vielen Dank und Gruss Ticino |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:09 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 by Thomas Breitkreuz