Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SUM Werte im Union addieren (https://www.delphipraxis.net/167915-sum-werte-im-union-addieren.html)

Andidreas 25. Apr 2012 13:49

Datenbank: DB2 • Version: V7R1 • Zugriff über: Embedded SQL

SUM Werte im Union addieren
 
Hallo zusammen,

ich hab mir folgenden SQL Befehl zusammengebastelt der mir Aufgrund von verschiednen Regeln eine Summe errechnet:

Code:
(select
FLD01, Decimal(sum(FLD02), 7, 2)
from tridatt.oldph
where FLD03 In ('17', '18')
group by FLD01)

union

(select
FLD01, Round(((Decimal(sum(FLD02), 7, 2) / 5) * 3), 0)
from tridatt.oldph
where FLD03 In ('19')
group by FLD01)

order by FLD01
Im Feld FLD01 befinden sich Artikelinformationen und in FLD03 Kalenderwochen...
Es kann jetzt sein das ich für einen Artikel 2 Summen erhalte.
Kann ich denn Union so aufbauen das ich pro Artikel nur noch eine Summe habe?

mkinzler 25. Apr 2012 13:53

AW: SUM Werte im Union addieren
 
Vielleicht mit Hilfe einer Derived Table?

Andidreas 25. Apr 2012 14:00

AW: SUM Werte im Union addieren
 
Zitat:

Zitat von mkinzler (Beitrag 1163498)
Vielleicht mit Hilfe einer Derived Table?

Was ist das?
Ich hör das zum ersten mal!

mkinzler 25. Apr 2012 14:03

AW: SUM Werte im Union addieren
 
SQL-Code:
select
    sum( ...), ...
from
((select
FLD01, Decimal(sum(FLD02), 7, 2)
from tridatt.oldph
where FLD03 In ('17', '18')
group by FLD01)

union

(select
FLD01, Round(((Decimal(sum(FLD02), 7, 2) / 5) * 3), 0)
from tridatt.oldph
where FLD03 In ('19')
group by FLD01)

order by FLD01 )
group by ...;

Neutral General 25. Apr 2012 14:06

AW: SUM Werte im Union addieren
 
Oder in Worten: Ein Select auf ein Select (statt auf eine Tabelle):

SQL-Code:
SELECT
  sum(Feld1)
FROM
  ( 
    SELECT
      Felder
    FROM Tabelle1
    UNION
    SELECT
      Felder
    FROM Tabelle2
  )
GROUP BY Feld2

Andidreas 25. Apr 2012 14:08

AW: SUM Werte im Union addieren
 
Ich weiß nicht ob das des gleiche ist, aber so funktionierts auf alle fälle in der DB2 von der AS400

Code:
with summe (FLD01, menge)
as
(
select
FLD01, Decimal(sum(FLD02), 7, 2) as menge
from tridatt.oldph
where FLD03 In ('17', '18')
group by FLD01)

union

select
FLD01, Round(((Decimal(sum(FLD02), 7, 2) / 5) * 3), 0) as menge
from tridatt.oldph
where FLD03 In ('19')
group by FLD01
)

select fld01, sum(menge) from summe
group by FLD01
order by FLD01


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