Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   NVL, NZ - aber was in Local SQL unter Paradox? (https://www.delphipraxis.net/42159-nvl-nz-aber-local-sql-unter-paradox.html)

Ticino 14. Mär 2005 18:30

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.

Jelly 14. Mär 2005 21:35

Re: NVL, NZ - aber was in Local SQL unter Paradox?
 
Zitat:

Zitat von Ticino
Ich verwende Paradox für eine grössere Applikation.

Was ist denn groß ?
Zitat:

Zitat von Ticino
Dabei habe ich das Problem nicht existierender Werte,
(Z.B. Rechnungen ohne Zahlungen) möchte aber trotzdem
Berechnungen damit durchführen.

Es wäre hilfreich zu wissen, wie erstens deine Datenstruktur aussieht, und was du überhaupt berechnen willst... Hier im Forum tummeln sich zwar viele schlaue Köpfe, aber Hellseher hab ich hier noch keine angetroffen. :zwinker:

Zitat:

Zitat von Ticino
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 ?

Evenetuell interpretiert Paradox die NULL Felder als 0-Wert. Probiers doch mal aus, was dir folgendes Statement liefert... (sorry, ich benutze kein Paradox, was seine Gründe hat):
SQL-Code:
select null+1

MrSpock 14. Mär 2005 22:42

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

Ticino 15. Mär 2005 19:42

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:
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;
Wird die Funktion NZ durch NVL ersetzt, ist die Abfrage wahrscheinlich auch unter ORACLE lauffähig.

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:
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
Nun dies ist Mal eine Lösung. Der erste SELECT in der UNION wird recht schnell ausgeführt, der zweite
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

Ticino 15. Mär 2005 19:50

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.

Ticino 18. Mär 2005 13:57

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 00:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz