![]() |
Datenbank: Paradox • Zugriff über: BDE
SQL liefert bei UNION kein Ergebnis, wenn Ergebnis = Null
Hallo zusammen,
habe schon verschiedene Beiträge zu meinem Problem nachgelesen, aber nichts gefunden, was irgendwie passte oder umsetzbar war. Es geht um folgendes: Ich habe eine Tabelle mit Projekten, in denen unter anderem vermerkt ist, ob es aktiv ist und seit wann die Planungen laufen. Ich möchte in einem DBChart darstellen:
Die Abfrage mache ich mittels SQL und Union. Das Problem ist nur, wenn bei einer der vier Abfragen die Ergebnismenge Null ist, wird nicht Null ausgegeben, sonden eben gar nichts. Es könnte (und wird) also sein, dass weniger als 4 Ergebnisse vorliegen ... nur wie bekomme icrh heraus, welche der vier Abfragen kein Ergebnis lieferte?
Delphi-Quellcode:
Bekomme ich nicht heraus, welche der vier Abfragen die Nullmege(n) entält/enthalten, kann ich die Beschriftungen beim DBChart nicht korrekt setzen.
Select Count(Bearbeitung) AS Anzahl
FROM Projekte WHERE Bearbeitung <= '+QuotedStr(DateToStr(Date-365))+' and Aktiv = "True" UNION Select Count(Bearbeitung) AS Anzahl FROM Projekte WHERE Bearbeitung <= '+QuotedStr(DateToStr(Date-365))+' and Aktiv = "False" UNION Select Count(Bearbeitung) AS Anzahl FROM Projekte WHERE Bearbeitung > '+QuotedStr(DateToStr(Date-365))+' and Aktiv = "True" UNION Select Count(Bearbeitung) AS Anzahl FROM Projekte WHERE Bearbeitung > '+QuotedStr(DateToStr(Date-365))+' and Aktiv = "False" Die Lösung ist wahrscheinlich ganz banal. Habe auch schon mit INNER JOIN probiert, aber nix gut. Vielen Dank vorab! |
Re: SQL liefert bei UNION kein Ergebnis, wenn Ergebnis = Nul
Versuch es mal mit (SQL-)Parametern
|
Re: SQL liefert bei UNION kein Ergebnis, wenn Ergebnis = Nul
Kann ich mit Parametern beeinflussen, ob die Ergebnismenge ausgegeben wird, auch wenn sie Null ist? Hast du einen Ansatz? Danke!
|
Re: SQL liefert bei UNION kein Ergebnis, wenn Ergebnis = Nul
Das scheint eher ein Problem von Paradox (der BDE) zu sein. Mit parametern würdest dur das DateToStr() und das Quoten Sparen.
Die Abfrage an sich sollte aber funktionieren
SQL-Code:
Select
Count(Bearbeitung) AS Anzahl, FROM Projekte WHERE Bearbeitung <= :Datum and Aktiv = "True" UNION Select Count(Bearbeitung) AS Anzahl FROM Projekte WHERE Bearbeitung <= :datum and Aktiv = "False" ...
Delphi-Quellcode:
DataSet.ParamByName('Datum').Value := IncYear( Date(), -1);
|
Re: SQL liefert bei UNION kein Ergebnis, wenn Ergebnis = Nul
Erweitere doch deine Abfrage durch eine neue Spalte, die angibt, welcher Wert in der Zeile zurückgegeben wird...
SQL-Code:
Eine andere Variante ist folgende...
SELECT 'A' typ, COUNT(Bearbeitung) AS Anzahl
FROM Projekte WHERE Bearbeitung <= :datum AND Aktiv = "True" UNION SELECT 'B' typ, COUNT(Bearbeitung) AS Anzahl FROM Projekte WHERE Bearbeitung <= :datum AND Aktiv = "False" UNION SELECT 'C' typ, COUNT(Bearbeitung) AS Anzahl FROM Projekte WHERE Bearbeitung > :datum AND Aktiv = "True" UNION SELECT 'D' typ, COUNT(Bearbeitung) AS Anzahl FROM Projekte WHERE Bearbeitung > :datum AND Aktiv = "False"
SQL-Code:
Ob das aber auch mit Paradox funktioniert weiss ich nicht.
SELECT SUM(CASE WHEN Bearbeitung <= :datum AND Aktiv = "True" THEN 1 ELSE 0 END) A,
SUM(CASE WHEN Bearbeitung <= :datum AND Aktiv = "False" THEN 1 ELSE 0 END) B, SUM(CASE WHEN Bearbeitung > :datum AND Aktiv = "True" THEN 1 ELSE 0 END) C, SUM(CASE WHEN Bearbeitung > :datum AND Aktiv = "False" THEN 1 ELSE 0 END) D FROM Projekte |
Re: SQL liefert bei UNION kein Ergebnis, wenn Ergebnis = Nul
Vielen Dank für die Antworten. Klappt leider alles nicht ... liegt am eingeschränkten Befehlssatz von LocalSQL. Da gibts zum Beispiel auch kein CASE. Auch "frei definierte Textspalten" ('A' typ) gibt es nicht in verschachtelten Abfragen. Alles etwas blöd. Das Programm ist eines meiner ersten aus dem Jahre 1998 oder so. Von daher hat es noch die recht eingeschränkte Paradox-Datenbank und ich will nicht alles "ummodeln".
Hat jemand noch eine Idee? Etwas, was auch bei 0815-Paradox noch klappen könnte? Liebe Grüße Chaoten-Joe |
Re: SQL liefert bei UNION kein Ergebnis, wenn Ergebnis = Nul
Zitat:
|
Re: SQL liefert bei UNION kein Ergebnis, wenn Ergebnis = Nul
Voll fett krass! Eure Tipps waren Gold wert! Baue ich noch GROUP BY ein, klappt es:
Delphi-Quellcode:
Vielen Dank!
Select 'A' Typ, Count(Bearbeitung) AS Anzahl
FROM Projekte WHERE Bearbeitung <= :Datum and Aktiv = True GROUP BY Aktiv UNION Select 'B' Typ, Count(Bearbeitung) AS Anzahl FROM Projekte WHERE Bearbeitung <= :Datum and Aktiv = False GROUP BY Aktiv UNION Select 'C' Typ, Count(Bearbeitung) AS Anzahl FROM Projekte WHERE Bearbeitung > :Datum and Aktiv = True GROUP BY Aktiv UNION Select 'D' Typ, Count(Bearbeitung) AS Anzahl FROM Projekte WHERE Bearbeitung > :Datum and Aktiv = False GROUP BY Aktiv |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 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