ubuntuusers.de

Frage zu SQL Query

Status: Ungelöst | Ubuntu-Version: Ubuntu 19.10 (Eoan Ermine)
Antworten |

Maran

Anmeldungsdatum:
31. März 2020

Beiträge: 1

Wohnort: Frankfurt

Hallo zusammen!

Ich hab mir ein Query geschrieben, dass leider nicht die gewünschten Ergebnisse liefert. Jetzt wollte ich Fragen, ob ich es überhaupt so lösen kann, oder ob ich hier auf dem falschen Weg bin?

Ich möchte aus einer Restaurant Datenbank einige dinge selektieren, die ich am besten kurz beschreibe:

- Wenn d.FlOffen = -1 ist, dann ist der Kellner Anwesend und arbeitet gerade, mit COUNT möchte ich auf die Anzahl anwesender Kellner kommen.

- d1.brulohn (Lasst euch hier vom Spaltennamen nicht verwirren) ist der Betrag, den ein Kellner pro Stunde kostet, also z.b. 50.- Hier möchte ich den Durchschnittsbetrag aller anwesenden Kellner selektieren.

- In der Tabelle Bon werden alle gebuchten Artikel angezeigt. d2.PosWert ist der Umsatz, also BezogeneMenge*Verkaufspreis und davon möchte ich die Summe.

- als SummeEK möchte ich die Summe des Einkaufspreises aller verkauften Artikel. d3.ekakt ist der aktuelle Einkaufspreis des Artikels und d2.Menge, die Menge.

- Desweiteren möchte ich nur die Daten, die während der letzten Stunde generiert wurden, dass wollte ich mit "(DATEDIFF(hh, d2.BonDat, GETDATE()) ⇐ 1)" machen. d2.BonDat ist das genaue Datum und die Genaue Zeit, wann der Artikel gebucht wurde.

Ich hoffe ich konnte Euch mein Problem schildern und möchte mich bereits jetzt für Eure Hilfe bedanken!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
SELECT COUNT(d.FlOffen)        AS AnzKellner, 
       AVG(d1.brulohn)         AS DurchschnittBruLohn, 
       SUM(d2.PosWert)         AS SummeUmsatz, 
       SUM(d3.ekakt*d2.Menge)  AS SummeEK
         
FROM
    dbo.ZeitBuchung    d, 
    dbo.Kellner        d1, 
    dbo.Bon            d2, 
    dbo.Arti           d3
      
WHERE   
     d.FlOffen  = '-1'  
AND  d.kellnr   = d1.Kellnr                                                          
AND d3.artnr    = d2.artnr    
AND (DATEDIFF(hh, d2.BonDat, GETDATE()) <= 1)

sebix Team-Icon

Ehemalige

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

Welche Datenbank verwendest du ueberhaupt?

Alle Queries nur aus dem Kopf und nicht getestet, bitte selbst validieren ☺

Maran schrieb:

- Wenn d.FlOffen = -1 ist, dann ist der Kellner Anwesend und arbeitet gerade, mit COUNT möchte ich auf die Anzahl anwesender Kellner kommen.

1
SELECT COUNT("FlOffen" = -1) as AnzKellner FROM dbo.ZeitBuchung

- d1.brulohn (Lasst euch hier vom Spaltennamen nicht verwirren) ist der Betrag, den ein Kellner pro Stunde kostet, also z.b. 50.- Hier möchte ich den Durchschnittsbetrag aller anwesenden Kellner selektieren.

1
SELECT AVG("brulohn") as DurchschnittBruLohn FROM dbo.Kellner

- In der Tabelle Bon werden alle gebuchten Artikel angezeigt. d2.PosWert ist der Umsatz, also BezogeneMenge*Verkaufspreis und davon möchte ich die Summe.

1
SELECT SUM("PosWert") as SummeUmsatz FROM dbo.Bon

- als SummeEK möchte ich die Summe des Einkaufspreises aller verkauften Artikel. d3.ekakt ist der aktuelle Einkaufspreis des Artikels und d2.Menge, die Menge.

1
SELECT SUM(d3.ekakt*d2.Menge) as SummeEK FROM dbo.Arti d3 JOIN dbo.Bon d2 ON ...

Die JOIN-Bedingung kann ich aus deinen Angaben nicht erkennen

Wenn du die Ausgaben verschiedener Abfragen in einer Abfrage kombinieren willst, kannst du UNION verwenden, aber ich verstehe an der Stelle noch nicht, wie (und warum) du das haben willst.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13204

Herzlich willkommen hier im Forum!

Maran schrieb:

Ich hoffe ich konnte Euch mein Problem schildern und möchte mich bereits jetzt für Eure Hilfe bedanken!

Was ist denn das Problem? Liefert die Abfrage, die Du geteilt hast, nicht das richtige Ergebnis?

Man müsste auch noch das Schema inklusiver eventueller Foreign Keys kennen. Ich würde aber schon mal tippen, dass ein Problem Deiner Abfrage ist, dass Du durch die Joins die Anzahl z.B. der Datensätze aus "Kellner" vermehrfachst, wodurch dann die Ergebnisse für AVG(d1.brulohn) falsch werden können. Konkret besteht die Gefahr m.E. für den Join in Zeile 16, der ja ein recht unscharfes Kriterium hat. Und übrigens, ich vermute, dass Datediff auch negativ werden kann. Überlege Dir mal, was das mit dem Join macht.

Antworten |