AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datensatz immer ausgeben

Ein Thema von pustekuchen · begonnen am 1. Dez 2010 · letzter Beitrag vom 2. Dez 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#1

Datensatz immer ausgeben

  Alt 1. Dez 2010, 08:09
Datenbank: Firebird • Version: 2.5 • Zugriff über: isql.exe
Guten Morgen,

ich bräuchte nochmal eure Hilfe

Ich habe folgende Abfrage:
SQL-Code:
SELECT DISTINCT COUNT(gerichte.restaurant_id), restaurants.id
FROM restaurants,bestellungen,gerichte
WHERE bestellungen.gericht_id = gerichte.id
AND gerichte.restaurant_id = restaurants.id
AND bestellungen.datum = CURRENT_DATE
GROUP BY restaurants.id;
Ausgabe:
SQL-Code:
       COUNT ID
============ ============
           3 1
           1 2
Diese gibt die Anzahl der Bestellunge der jeweiligen Restaurants aus.
Doch wenn es keine Bestellungen in einem Restaurant gibt, wird auch nichts ausgebeben.
Wie bekomm ich es nun hin, das für jede restaurant.id die Anzahl ausgegeben wird, auch wenn keine Bestellungen vorhanden sind.Also in diesem fall dann eine 0 oder Null.

Also folgendermaßen:
Ausgabe:
SQL-Code:
       COUNT ID
============ ============
      0(NULL) 0
           3 1
           1 2
Ich habe schon einge Sachen versucht, doch leider find ich nicht den richtigen Weg
Gibt es evnt einen Parameter, der dies ermöglicht?
Danke schonmal für jede Hilfe
Delphi programming is awesome.
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Datensatz immer ausgeben

  Alt 1. Dez 2010, 08:20
Ich hab jetzt die Verarbeitung des Outputs geändert. Aber es würde mich trotzdem interessieren ob es möglich ist
Delphi programming is awesome.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Datensatz immer ausgeben

  Alt 1. Dez 2010, 08:21
Ungetestet:
SQL-Code:
SELECT COUNT(*), restaurants.id
FROM restaurants
LEFT JOIN gerichte ON gerichte.restaurant_id = restaurants.id
LEFT JOIN bestellungen ON bestellungen.gericht_id = gerichte.id
WHERE bestellungen.datum = CURRENT_DATE
GROUP BY restaurants.id;
[edit] In COUNT(*) geändert, siehe http://www.firebirdsql.org/manual/nu...-aggrfunc.html [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH ( 1. Dez 2010 um 08:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Datensatz immer ausgeben

  Alt 1. Dez 2010, 08:36
Mhh klappt leider nicht
Kommt das gleiche wie bei mir raus.
Delphi programming is awesome.
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
672 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Datensatz immer ausgeben

  Alt 1. Dez 2010, 08:52
poste mal kurz die DDL für Deine Tabellen. Macht das Nachbauen leichter
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von rapante
rapante

Registriert seit: 3. Jun 2009
Ort: OPR
171 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Datensatz immer ausgeben

  Alt 1. Dez 2010, 09:00
imho, klappt der Vorschlag mit dem Left Join von DeddyH aufgrund des WHERE-Statements nicht.
(Weil für ein Restaurant ohne Einträge die Bedingung niemals wahr ist...?!)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Datensatz immer ausgeben

  Alt 1. Dez 2010, 09:09
Guter Einwand. Dann versuchen wir es doch mal so:
SQL-Code:
SELECT COUNT(*), restaurants.id
FROM restaurants
LEFT JOIN gerichte ON gerichte.restaurant_id = restaurants.id
LEFT JOIN bestellungen ON bestellungen.gericht_id = gerichte.id
                       AND bestellungen.datum = CURRENT_DATE
GROUP BY restaurants.id
Ich bin aber im Moment anderweitig beschäftigt, kann mich daher nicht ausreichend mit dem Problem auseinandersetzen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
672 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Datensatz immer ausgeben

  Alt 1. Dez 2010, 09:10
ok, habs nachgebaut. Was Du brauchst, ist ein outer join Deines Ergebnisses mit der restaurants-Tabelle:
SQL-Code:

SELECT a.*, b.Anzahl FROM
restaurants a
LEFT OUTER JOIN
(
SELECT DISTINCT COUNT(gerichte.restaurant_id) AS Anzahl, restaurants.id AS Id
FROM restaurants,bestellungen,gerichte
WHERE bestellungen.gericht_id = gerichte.id
AND gerichte.restaurant_id = restaurants.id
AND bestellungen.datum = CURRENT_DATE
GROUP BY restaurants.id
) b
on a.id=b.id
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Datensatz immer ausgeben

  Alt 1. Dez 2010, 10:46
Hallo

Sorry das ich mich erst so spät melde, hatte grade einiges zu tun
Danke mal wieder an DeddyH für die bemühungen

Und natürlich ein Danke an joachimd für den Lösungsweg

Ich werd mir das jetzt mal genau anschauen, hatte mich noch nicht mit den Joins auseinandergesetzt, aber ich wußte das es i-wie geht

Gruß
Delphi programming is awesome.
  Mit Zitat antworten Zitat
Tyrolean

Registriert seit: 3. Jul 2003
76 Beiträge
 
Delphi 7 Professional
 
#10

AW: Datensatz immer ausgeben

  Alt 2. Dez 2010, 08:08
ok, habs nachgebaut. Was Du brauchst, ist ein outer join Deines Ergebnisses mit der restaurants-Tabelle:
SQL-Code:

SELECT a.*, b.Anzahl FROM
restaurants a
LEFT OUTER JOIN
(
SELECT DISTINCT COUNT(gerichte.restaurant_id) AS Anzahl, restaurants.id AS Id
FROM restaurants,bestellungen,gerichte
WHERE bestellungen.gericht_id = gerichte.id
AND gerichte.restaurant_id = restaurants.id
AND bestellungen.datum = CURRENT_DATE
GROUP BY restaurants.id
) b
on a.id=b.id
So müsste das doch auch gehen:

SQL-Code:
SELECT DISTINCT COUNT(gerichte.restaurant_id) AS Anzahl, restaurants.id AS Id
FROM restaurants,bestellungen,gerichte
WHERE bestellungen.gericht_id = gerichte.id
AND gerichte.restaurant_id = restaurants.id
AND (bestellungen.datum = CURRENT_DATE OR bestellungen.datum is null)
GROUP BY restaurants.id
Eventuell den count noch anpassen

Gruß
günter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:08 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