AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken NVL, NZ - aber was in Local SQL unter Paradox?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Offene Frage von "Ticino"
Ein Thema von Ticino · begonnen am 14. Mär 2005 · letzter Beitrag vom 18. Mär 2005
 
Ticino

Registriert seit: 14. Mär 2005
4 Beiträge
 
#4

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

  Alt 15. Mär 2005, 19:42
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
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 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