AGB  ·  Datenschutz  ·  Impressum  







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

Hilfe bei SQL

Ein Thema von Metallicwar · begonnen am 4. Aug 2012 · letzter Beitrag vom 4. Aug 2012
Antwort Antwort
Metallicwar

Registriert seit: 5. Feb 2010
Ort: Bad Kissingen
293 Beiträge
 
Delphi XE Architect
 
#1

Hilfe bei SQL

  Alt 4. Aug 2012, 12:00
Datenbank: ADS • Version: 10 • Zugriff über: Delphi
Hi hänge grad bei einem SQL
Hier erstmal der SQL:
Dieser liefert mir bisher alle gebuchten Aufträge eines Mitarbeits zurück.
SQL-Code:
SELECT
    Auftrag.Nummer, Auftrag.Bezeichnung,
    Buchungen.BSumme,
    ZMIF.MinToHour(Buchungen.BSumme) as StdMin,
    ZMIF.MinToIHour(Buchungen.BSumme) as Dez,
    Personal.Name, Personal.Vorname, Personal.ID,
    (SELECT Min(Datum) FROM Buchungen) AS DatumVon,
    (SELECT Max(Datum) FROM Buchungen) AS DatumBis
FROM
    Auftrag
        LEFT OUTER JOIN Buchungen ON Auftrag.Nummer = Buchungen.AuftragNr
            LEFT OUTER JOIN Personal Personal ON Buchungen.ID_Personal = Personal.ID
WHERE
    Buchungen.ID IS NOT NULL AND
    Buchungen.Datum >= '01.01.2011AND Buchungen.Datum <= '01.08.2012
ORDER BY
    Name, Vorname, Auftrag.Nummer;
Ich möchte das Ergebnis noch gruppieren. Es kann nämlich auch sein, dass ein Mitarbeiter mehrmals den selben Auftrag anbucht.
So siehts bisher aus:

Zitat:
Auftragnr|Buchungssumme|Name
123|120|Mustermann
123|60|Mustermann
123|300|Mustermann
555|60|Mustermann
555|120|Mustermann
555|240|Müller
666|60|Marx
666|240|Marx
Ich möchte:
Zitat:
Auftragnr|Buchungssumme|Name
123|480|Mustermann
555|180|Mustermann
555|240|Müller
666|300|Marx
müsste doch nur noch ein group by sein oder und eine sum funktion oder?

Geändert von mkinzler ( 4. Aug 2012 um 12:08 Uhr) Grund: Code-Tag durch SQL-Tag ersetzt; Abfrage so eingerückt, dass man etwas erkennen kann
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Hilfe bei SQL

  Alt 4. Aug 2012, 12:13
Am einfachsten deine Abfarge als Derived Table weiter Gruppieren:

SQL-Code:
select
   AuftragNr,
   sum( Buchungssumme), name
from
   <Deine Abfrage>
group by
    AuftragNr, Name;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#3

AW: Hilfe bei SQL

  Alt 4. Aug 2012, 12:18
Haut das hier hin?
SQL-Code:
SELECT
  A.Nummer AS Auftragnr,
  SUM(B.BSumme) AS Buchungssumme,
  P.Name AS Name
FROM
  Auftrag A
LEFT JOIN
  Buchungen B ON B.AuftragNr = A.Nummer
LEFT JOIN
  Personal P ON P.ID = B.ID_Personal
WHERE
  B.ID IS NOT NULL
AND
  B.Datum BETWEEN '01.01.2011AND '01.08.2012'
GROUP BY
  A.Nummer, P.Name
ORDER BY
  A.Nummer, P.Name
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
Metallicwar

Registriert seit: 5. Feb 2010
Ort: Bad Kissingen
293 Beiträge
 
Delphi XE Architect
 
#4

AW: Hilfe bei SQL

  Alt 4. Aug 2012, 12:41
super, das wars, besten dank und ein schönes Wochenende !!
  Mit Zitat antworten Zitat
omata

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

AW: Hilfe bei SQL

  Alt 4. Aug 2012, 23:58
Fragt sich nur noch, warum das Outer-Joins sind?
SQL-Code:
SELECT A.Nummer AS Auftragnr,
       SUM(B.BSumme) AS Buchungssumme,
       P.Name AS Name
FROM Auftrag A
INNER JOIN Buchungen B
  ON A.Nummer = B.AuftragNr
INNER JOIN Personal P
  ON B.ID_Personal = P.ID
WHERE B.Datum BETWEEN '01.01.2011AND '01.08.2012'
GROUP BY A.Nummer, P.Name
ORDER BY A.Nummer, P.Name
Da B in der Where-Klausel und P in der Group-By-Klausel auftritt, können nur Zeilen im Ergebnis vorkommen, die in allen drei Tabellen vorkommen. Und das ist dann automatisch jeweils ein Inner-Join.

Edit: und dann auch noch B.ID IS NOT NULL. Wenn ID in B der PK ist, dann ist das ein Inner-Join.

Geändert von omata ( 5. Aug 2012 um 00:02 Uhr)
  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 23:30 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