AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL liefert bei UNION kein Ergebnis, wenn Ergebnis = Null
Thema durchsuchen
Ansicht
Themen-Optionen

SQL liefert bei UNION kein Ergebnis, wenn Ergebnis = Null

Ein Thema von Chaoten-Joe · begonnen am 1. Jun 2009 · letzter Beitrag vom 2. Jun 2009
Antwort Antwort
Chaoten-Joe

Registriert seit: 11. Mär 2007
Ort: Werl
41 Beiträge
 
Turbo Delphi für Win32
 
#1

SQL liefert bei UNION kein Ergebnis, wenn Ergebnis = Null

  Alt 1. Jun 2009, 23:40
Datenbank: Paradox • Zugriff über: BDE
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:
  • alle aktiven Projekte, vor weniger als einem Jahr begonnen
  • alle aktiven Projekte, vor mehr als einem Jahr begonnen
  • alle inaktiven Projekte, vor weniger als einem Jahr begonnen
  • alle inaktiven Projekte, vor mehr als einem Jahr begonnen

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:
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"
Bekomme ich nicht heraus, welche der vier Abfragen die Nullmege(n) entält/enthalten, kann ich die Beschriftungen beim DBChart nicht korrekt setzen.

Die Lösung ist wahrscheinlich ganz banal. Habe auch schon mit INNER JOIN probiert, aber nix gut.

Vielen Dank vorab!
Christian Becker
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: SQL liefert bei UNION kein Ergebnis, wenn Ergebnis = Nul

  Alt 1. Jun 2009, 23:43
Versuch es mal mit (SQL-)Parametern
Markus Kinzler
  Mit Zitat antworten Zitat
Chaoten-Joe

Registriert seit: 11. Mär 2007
Ort: Werl
41 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: SQL liefert bei UNION kein Ergebnis, wenn Ergebnis = Nul

  Alt 1. Jun 2009, 23:49
Kann ich mit Parametern beeinflussen, ob die Ergebnismenge ausgegeben wird, auch wenn sie Null ist? Hast du einen Ansatz? Danke!
Christian Becker
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: SQL liefert bei UNION kein Ergebnis, wenn Ergebnis = Nul

  Alt 2. Jun 2009, 00:01
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"
...
DataSet.ParamByName('Datum').Value := IncYear( Date(), -1);
Markus Kinzler
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: SQL liefert bei UNION kein Ergebnis, wenn Ergebnis = Nul

  Alt 2. Jun 2009, 01:50
Erweitere doch deine Abfrage durch eine neue Spalte, die angibt, welcher Wert in der Zeile zurückgegeben wird...
SQL-Code:
  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"
Eine andere Variante ist folgende...
SQL-Code:
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
Ob das aber auch mit Paradox funktioniert weiss ich nicht.
  Mit Zitat antworten Zitat
Chaoten-Joe

Registriert seit: 11. Mär 2007
Ort: Werl
41 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: SQL liefert bei UNION kein Ergebnis, wenn Ergebnis = Nul

  Alt 2. Jun 2009, 07:18
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
Christian Becker
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: SQL liefert bei UNION kein Ergebnis, wenn Ergebnis = Nul

  Alt 2. Jun 2009, 07:40
Zitat von Chaoten-Joe:
Von daher hat es noch die recht eingeschränkte Paradox-Datenbank und ich will nicht alles "ummodeln".
Es gibt einige Kompos die auch ohne BDE auf Paradox zugreifen können. Das "ummodeln" umfaßt also nicht alles. Aber BDE ist nunmal schon seit über 10 Jahren eine abgekündigte Technik.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Chaoten-Joe

Registriert seit: 11. Mär 2007
Ort: Werl
41 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: SQL liefert bei UNION kein Ergebnis, wenn Ergebnis = Nul

  Alt 2. Jun 2009, 07:46
Voll fett krass! Eure Tipps waren Gold wert! Baue ich noch GROUP BY ein, klappt es:
Delphi-Quellcode:
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
Vielen Dank!
Christian Becker
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:53 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