Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Sum()-Daten aus 2 Tabellen in einer Query (https://www.delphipraxis.net/108827-sum-daten-aus-2-tabellen-einer-query.html)

hoika 20. Feb 2008 08:09

Datenbank: FB • Version: 1.5 • Zugriff über: egal

Sum()-Daten aus 2 Tabellen in einer Query
 
Hallo #,

ich möchte die 2 Summen pro Projekt (Material, Zeit)
in einer Query ausgeben.
Bisher habe ich folgendes:

SQL-Code:
Select Sum(BillValue) As Value, 1 As Flag, Project.Id, Project.Number
From Bill
Join Project On Project.Id=Bill.ProjectId
Group By ProjectId, Project.Number

Union

Select Sum(ProjectTime) As Value, 2 As Flag, Project.Id, Project.Number
From ProjectTime
Join Project On Project.Id=ProjectTime.ProjectId
Group By ProjectId, Project.Number
Jetzt habe ich zwar beide Summen, die stehen aber untereinander.
Mit einem View und order by Number
(oder ab FB2 direkt mit select * from (<siehe oben>) order by number)
würde ich auch die Projekte untereinander haben.
Ich will aber nur eine Zeile pro Projekt.

Über eine SP könnte ich mir zuerst per "For Select Select Sum(BillValue)",
die Materialsummen der Projekte geben lassen,
dann für jedes Projekt die Zeitsummen ermitteln.
Was ist aber mit Projekten, die nicht in der Bill-Tabelle stehen.

OK, die könnte ich mir nachträglich auch noch holen.

Ist aber ziemlich viel Aufwand für so ein bissel Output.

Wie würdet ihr vorgehen.

FB2 steht beim Kunden erst mal nicht zur Diskussion
(er hat noch Programme laufen,, die maximal FB1.5 erlauben).


Heiko

DeddyH 20. Feb 2008 08:19

Re: Sum()-Daten aus 2 Tabellen in einer Query
 
Ohne Gewähr, da aus dem Kopf dahergetippselt:
SQL-Code:
SELECT SUM(CASE B.BillValue WHEN NULL THEN 0 ELSE B.BillValue END) AS BValue,
SUM(CASE PT.ProjectTime WHEN NULL THEN 0 ELSE PT.ProjectTime END) AS PTime,
P.id, P.Number
FROM Project P
LEFT JOIN ProjectTime PT ON PT.ProjectId = P.Id
LEFT JOIN Bill B ON B.ProjectId = P.Id
GROUP BY P.Id, P.Number

hoika 20. Feb 2008 09:27

Re: Sum()-Daten aus 2 Tabellen in einer Query
 
Hallo,

unter FB1.5 meckert er das NULL im Case an,
unter FB2.0 nicht.

Dummerweise steht ausserdem die ProjectId nicht direkt in ProjectTime ;(

Ich habe das jetzt mit einer SP gemacht puhhhhh
Mal ausdrucken, wegpackne, falls doch auf FB2 gewechselt wird,
könnte man die SP ja ändern.

Danke trotzdem!


Heiko

mkinzler 20. Feb 2008 09:34

Re: Sum()-Daten aus 2 Tabellen in einer Query
 
Funktioniert
SQL-Code:
... CASE WHEN B.BillValue is NULL THEN 0 ELSE B.BillValue END ...
?

hoika 20. Feb 2008 10:23

Re: Sum()-Daten aus 2 Tabellen in einer Query
 
Hallo,

ja, unter FB2.


Heiko

DeddyH 20. Feb 2008 10:59

Re: Sum()-Daten aus 2 Tabellen in einer Query
 
Und so?
SQL-Code:
SELECT SUM(CASE WHEN (B.BillValue IS NULL) THEN 0 ELSE B.BillValue END) AS BValue,
SUM(CASE WHEN (PT.ProjectTime IS NULL) THEN 0 ELSE PT.ProjectTime END) AS PTime,
P.id, P.Number
FROM Project P
LEFT JOIN ProjectTime PT ON PT.ProjectId = P.Id
LEFT JOIN Bill B ON B.ProjectId = P.Id
GROUP BY P.Id, P.Number
Laut dieser Seite sollte das gehen.

hoika 20. Feb 2008 13:28

Re: Sum()-Daten aus 2 Tabellen in einer Query
 
Hallo,

mit Klmmmern geht es jetzt schon mal weiter ...
Da ist aber noch eine andere Tabelle mit im Spiel,
muss ich heute abend mal basteln.

Danke


Heiko

omata 21. Feb 2008 01:04

Re: Sum()-Daten aus 2 Tabellen in einer Query
 
Vielleicht so...

SQL-Code:
SELECT id, number, SUM(value) value
FROM (SELECT SUM(billvalue) AS value, 1 AS flag, p.id, p.number
      FROM bill x
      INNER JOIN project p
        ON p.id = x.projectid
      GROUP BY p.id, p.number

      UNION ALL

      SELECT SUM(projecttime) AS value, 2 AS flag, p.id, p.number
      FROM projecttime x
      INNER JOIN project p
        ON p.id = x.projectid
      GROUP BY p.id, p.number) x
GROUP BY id, number
Gruss
Thorsten

hoika 21. Feb 2008 07:59

Re: Sum()-Daten aus 2 Tabellen in einer Query
 
Hallo,

ja, union hatte ich auch schon drin,
die 2 Zeiten sollen aber nebeneinander stehen,
die XXX (aktuell SP) wird direkt aus Excel heraus ausgerufen,
ohne noch was daran zu machen.


Heiko

omata 21. Feb 2008 20:01

Re: Sum()-Daten aus 2 Tabellen in einer Query
 
Achso, nebeneinander...

SQL-Code:
SELECT p.id, p.number, billvalue, projecttime
FROM project p
LEFT JOIN (SELECT projectid AS id, SUM(billvalue) AS billvalue
           FROM bill
           GROUP BY projectid) a
  ON p.id = a.id
LEFT JOIN (SELECT projectid AS id, SUM(projecttime) AS projecttime
           FROM projecttime
           GROUP BY projectid) b
  ON p.id = b.id
Gruss
Thorsten


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:40 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