Query 1 minus Query 2

IchHH

Datenbank-Guru
Beiträge
284
Moin Moin,

ich hoffe ihr könnt mir bei meinem Problem(en) helfen.

Die gestalten sich wie folgt:

1. Ich würde gerne ein Select gegen ein anderes Select subtrahieren. Dazu hatte ich zwei Ansätze verfolgt. Der erste Ansatz war, die Werte aus dem zweiten Select mit (*-1) zu multiplizieren und mittels Union All diese Abfrage zusammen zu führen. Funktioniert leider nicht. Zweite Ansatz war jeden Wert mittels Sum und Subselect des Werten aus Select 2 zu ermitteln. Sehr mühseelig bei hunderten von Werten die auf diese Art ermittels werden müssten. Zudem nicht wirklich performant.

2. Wenn ich die Werte aus einen der beiden Select auch für andere Berechung nutzen möchte, wie stelle ich das am besten an, dass ich nicht jedesmal wieder die Punke aus 1. wiederholen muss? Zumal das Ergebnis aus der substraktion der beiden als Ergebnis für ein weiteren Abzug herhalten sollte.

Bin auf eure Antworten gespannt und freue mich.

Grüße aus Hamburg
 
Werbung:
kannst Du das mal als Beispiel zeigen? Liefern Deine Selects einen oder mehrere Werte? Irgendwie versteh ich nicht, was Du machen willst ...
 
Hallo akretschmer,

aktuell nutze ich folgenden nicht funktionieren Code:

Code:
Select z.*
from (
-- fügt die kum VJ ein
SELECT  ZeitVersionID
,version_id
,EE_ID
,PKEE_ID
,BS
,WERK
,LIEFERWERK
,SONPROWERK
,WE_ID
,RE_ID
,RE_WK_ID
,SA16
,REKLAMAT
,ID
,SILPLA
,VKFABT
,LAGVON
,VSA
,date
,datekey
,'0_999' as datekeyAUR
,monat
,ZTR
,MARKE_ID
,nielsen
,BLAND
,BL
,KAM
,KONTRAKTID
,KONTRAKTHVID
,ENTFKUNDE
,ENTFKUNDE_CNT
,BANZAHL
,Eanzahl as [Absatz VSE]
,ANZPAL as [Anzahl bestellte Paletten]
,ANZANBPAL as [Anzahl Anbruchpal. bei Best.]
,BGEWICHT
,Egewicht as [Absatz kg]
,Lsposnethw as [Umsatz netto]
,Lsposbruhw as [Umsatz Faktura Brutto 1]
,LSFRACHTHW
,LSVORFRAHW
,LSFRAVGTHW as [Kondition Sonstiges]
,Lsdelcrehw as [Kondition Delkredere]
,LSSAREZAHW as [Kondition SA 1]
,LSFRAVGSHW as [Kondition Frachtvergütung SA 1]
,Lssonstihw as [Artikelrabatte]
,LSSKONTOHW as [Kondition Skonto]
,LSZBDSKOHW
,Lsnizufahw as [Kondition SA 1 Nizufas]
,ZENTRALKONDITION as [Zentralkondition]
,Wkzkosthw as [Kosten WKZ]
,Zbdzinshw as [Kosten Zinsen Zdb.]
,Ausfuhrhw as [Kosten Ausfuhr]
,Gkeinstand as [Kosten Einstand]
,Gkverpack as [Kosten Verpackung]
,GKVORFRACH as [Kosten Vorfracht]
,Gkvarhkost as [Kosten Energie]
,Gkabnahme as [Kosten Zoll MÜMÜ]
,Gkgrupunkt as [Kosten DSD]
,Gkchep as [Kosten CHEP]
,GKUMLAGER
,FRABSCHLAG
,FRABSCHLAG_CNT
,LAGHALKOST
,Grenzkawhw as [Grenzkosten]
,Dbeitrag as [DB Werk]
,DBEITRAGLM
,DBEITRAGSM
,DBEITRAGKO
,Pveinstand as [Kosten sonstiges VPM]
,VARPROVKST
,Agewicht as [Akt. Gew.]
,AKTIONSGEWICHTNICHTBESTAETIGT as [Akt. Gew. (nicht bestätigt)]
,AKTIONSGEWICHTBESTAETIGT as [Akt. gew. (bestätigt)]
,LSNIZUL1HW
,Lsnizul2hw as [Akt. Umsatz]
,UMSNN
,UMSFF
,UmsFFnewCalc as [Ums. FF]
,Dbwkz as [DB vor WKZ]
,AnzVke as [Absatz VKE]
,RESN1 as [DNP]
,RESN2 as [Messerabatt]
,RESN3 as [Frachtstaffelrabatt]
,RESN4 as [Konditionsrabatte]
,RESN5 as [Rückvergütungen]
,RESN6 as [Transport-RVG]
,RESN7 as [Sonderrückvergütungen]
,AKTIONSRUECKVERGUETUNG as [Aktionsrückvergütung]
,RESN8 as [Kernsortimentsbonus]
,RESN9 as [Vermarktungsbonus]
,LSNIZULO1 as [Aktionsrabatt]
,NetUmsNachArtRab as [Umsatz Faktura Netto 1]
,Fakturaumsatz as [Umsatz Faktura Netto 2]
,UmsNNvorLstgKond as [Umsatz N/N 1]
,UmsNNnewCalc
,UmsFF2Calc
,NR_EGEWICHT
,NR_EANZAHL
,AB_EANZAHL
,AB_EGEWICHT
,AB_AnzVKE
,UmsatzFakturaBrutto2 as [Umsatz Faktura Brutto 2]
,Artikelrabatt1 as [Artikelrabatt 1]
,Artikelrabatt2 as [Artikelrabatt 2]
,Produktfixkosten as [Produktfixkosten]
,DBnachProduktfixkosten as [DB nach Produktfixkosten]
,Bereitschaftskostenumlage as [Bereitschaftskostenumlage]
,DBnachBereitschaftskosten as [DB nach Bereitschaftskosten]
,KostenWKZGuV as [_Kosten WKZ (GuV)]
,UmsatzNN3GuV as [_Umsatz NN3 (GuV)]
,ProduktfixkostenGuV as [_Produktfixkosten (GuV)]
,DBvorWKZohnePFKGuV as [_DB vor WKZ ohne PFK (GuV)]
,DBvorWKZmitPFKGuV as [_DB vor WKZ mit PFK (GuV)]
,DBWerkOhnePFKGuV as [_DB Werk ohne PFK (GuV)]
,DBWerkMitPFKGuV as [_DB Werk mit PFK (GuV)]
,GrossMarginOhnePFK as [Gross Margin ohne PFK]
,GrossMarginMitPFK as [Gross Margin mit PFK]
,GrossMarginOhnePFKGuV as [_Gross Margin ohne PFK (GuV)]
,GrossMarginMitPFKGuV as [_Gross Margin AB EGEWICHTmit PFK (GuV)]
,ContributionToProfitOhnePFK as [Contribution to Profit ohne PFK]
,ContributionToProfitMitPFK as [Contribution to Profit mit PFK]
,ContributionToProfitOhnePFKGuV as [_Contribution to Profit ohne PFK (GuV)]
,ContributionToProfitMitPFKGuV as [_Contribution to Profit mit PFK (GuV)]
,UmsNN3 as [Umsatz N/N 3]
  FROM [POW].[dbo].[FACT_HA_AUR_ARTMONNP_ALL]
  Where datekeyAUR = '0_21000101'
 
 Union All

--Fügt Werte für die Year_caption mit dem Namen "kum LJ/VJ" hinzu
-- dazu wird zunächst 0_kumVJ als Minusbetrag generiert
SELECT  ZeitVersionID
,version_id
,EE_ID
,PKEE_ID
,BS
,WERK
,LIEFERWERK
,SONPROWERK
,WE_ID
,RE_ID
,RE_WK_ID
,SA16
,REKLAMAT
,ID
,SILPLA
,VKFABT
,LAGVON
,VSA
,date
,datekey
,'0_999' as datekeyAUR
,monat
,ZTR
,MARKE_ID
,nielsen
,BLAND
,BL
,KAM
,KONTRAKTID
,KONTRAKTHVID
,ENTFKUNDE
,ENTFKUNDE_CNT
,BANZAHL*-1 as BANZAHL
,Eanzahl*-1 as [Absatz VSE]
,ANZPAL*-1 as [Anzahl bestellte Paletten]
,ANZANBPAL*-1 as [Anzahl Anbruchpal. bei Best.]
,BGEWICHT*-1 as [BGEWICHT]
,Egewicht as [Absatz kg]
,Lsposnethw*-1 as [Umsatz netto]
,Lsposbruhw*-1 as [Umsatz Faktura Brutto 1]
,LSFRACHTHW*-1 as [LSFRACHTHW]
,LSVORFRAHW*-1 as [LSVORFRAHW]
,LSFRAVGTHW*-1 as [Kondition Sonstiges]
,Lsdelcrehw*-1 as [Kondition Delkredere]
,LSSAREZAHW*-1 as [Kondition SA 1]
,LSFRAVGSHW*-1 as [Kondition Frachtvergütung SA 1]
,Lssonstihw*-1 as [Artikelrabatte]
,LSSKONTOHW*-1 as [Kondition Skonto]
,LSZBDSKOHW*-1 as LSZBDSKOHW
,Lsnizufahw*-1 as [Kondition SA 1 Nizufas]
,ZENTRALKONDITION*-1 as [Zentralkondition]
,Wkzkosthw*-1 as [Kosten WKZ]
,Zbdzinshw*-1 as [Kosten Zinsen Zdb.]
,Ausfuhrhw*-1 as [Kosten Ausfuhr]
,Gkeinstand*-1 as [Kosten Einstand]
,Gkverpack*-1 as [Kosten Verpackung]
,GKVORFRACH*-1 as [Kosten Vorfracht]
,Gkvarhkost*-1 as [Kosten Energie]
,Gkabnahme*-1 as [Kosten Zoll MÜMÜ]
,Gkgrupunkt*-1 as [Kosten DSD]
,Gkchep*-1 as [Kosten CHEP]
,GKUMLAGER*-1 as GKUMLAGER
,FRABSCHLAG*-1 as FRABSCHLAG
,FRABSCHLAG_CNT*-1 as FRABSCHLAG
,LAGHALKOST*-1 as LAGHALTKOST
,Grenzkawhw*-1 as [Grenzkosten]
,Dbeitrag*-1 as [DB Werk]
,DBEITRAGLM*-1 as DBEITRAGLM
,DBEITRAGSM*-1 as DBEITRAGSM
,DBEITRAGKO*-1 as DBEITRAGSKO
,Pveinstand*-1 as [Kosten sonstiges VPM]
,VARPROVKST*-1 as VARPROVKST
,Agewicht*-1 as [Akt. Gew.]
,AKTIONSGEWICHTNICHTBESTAETIGT*-1 as [Akt. Gew. (nicht bestätigt)]
,AKTIONSGEWICHTBESTAETIGT*-1 as [Akt. gew. (bestätigt)]
,LSNIZUL1HW*-1 as LSNIZUL1HW
,Lsnizul2hw*-1 as [Akt. Umsatz]
,UMSNN*-1 as UMSNN
,UMSFF*-1 as UMSFF
,UmsFFnewCalc*-1 as [Ums. FF]
,Dbwkz*-1 as [DB vor WKZ]
,AnzVke*-1 as [Absatz VKE]
,RESN1*-1 as [DNP]
,RESN2*-1 as [Messerabatt]
,RESN3*-1 as [Frachtstaffelrabatt]
,RESN4*-1 as [Konditionsrabatte]
,RESN5*-1 as [Rückvergütungen]
,RESN6*-1 as [Transport-RVG]
,RESN7*-1 as [Sonderrückvergütungen]
,AKTIONSRUECKVERGUETUNG*-1 as [Aktionsrückvergütung]
,RESN8*-1 as [Kernsortimentsbonus]
,RESN9*-1 as [Vermarktungsbonus]
,LSNIZULO1*-1 as [Aktionsrabatt]
,NetUmsNachArtRab*-1 as [Umsatz Faktura Netto 1]
,Fakturaumsatz*-1 as [Umsatz Faktura Netto 2]
,UmsNNvorLstgKond*-1 as [Umsatz N/N 1]
,UmsNNnewCalc*-1 as UmsNNnewCalc
,UmsFF2Calc*-1 as UmsFF2Calc
,NR_EGEWICHT*-1 as NR_EGEWICHT
,NR_EANZAHL*-1 as NR_EANZAHL
,AB_EANZAHL*-1 as AB_EANZAHL
,AB_EGEWICHT*-1 as AB_EGEWICHT
,AB_AnzVKE*-1 as AB_AnzVKE
,UmsatzFakturaBrutto2*-1 as [Umsatz Faktura Brutto 2]
,Artikelrabatt1*-1 as [Artikelrabatt 1]
,Artikelrabatt2*-1 as [Artikelrabatt 2]
,Produktfixkosten*-1 as [Produktfixkosten]
,DBnachProduktfixkosten*-1 as [DB nach Produktfixkosten]
,Bereitschaftskostenumlage*-1 as [Bereitschaftskostenumlage]
,DBnachBereitschaftskosten*-1 as [DB nach Bereitschaftskosten]
,KostenWKZGuV*-1 as [_Kosten WKZ (GuV)]
,UmsatzNN3GuV*-1 as [_Umsatz NN3 (GuV)]
,ProduktfixkostenGuV*-1 as [_Produktfixkosten (GuV)]
,DBvorWKZohnePFKGuV*-1 as [_DB vor WKZ ohne PFK (GuV)]
,DBvorWKZmitPFKGuV*-1 as [_DB vor WKZ mit PFK (GuV)]
,DBWerkOhnePFKGuV*-1 as [_DB Werk ohne PFK (GuV)]
,DBWerkMitPFKGuV*-1 as [_DB Werk mit PFK (GuV)]
,GrossMarginOhnePFK*-1 as [Gross Margin ohne PFK]
,GrossMarginMitPFK*-1 as [Gross Margin mit PFK]
,GrossMarginOhnePFKGuV*-1 as [_Gross Margin ohne PFK (GuV)]
,GrossMarginMitPFKGuV*-1 as [_Gross Margin mit PFK (GuV)]
,ContributionToProfitOhnePFK*-1 as [Contribution to Profit ohne PFK]
,ContributionToProfitMitPFK*-1 as [Contribution to Profit mit PFK]
,ContributionToProfitOhnePFKGuV*-1 as [_Contribution to Profit ohne PFK (GuV)]
,ContributionToProfitMitPFKGuV*-1 as [_Contribution to Profit mit PFK (GuV)]
,UmsNN3*-1 as [Umsatz N/N 3]
  FROM [POW].[dbo].[FACT_HA_AUR_ARTMONNP_ALL]
  Where datekeyAUR = '0_22000101')z
 
Ok dann versuche ich das mal anders zu erklären.

So funktioniert es:

Code:
Select sum(Egewicht+AB_EGEWICHT)-(Select sum(Egewicht+AB_EGEWICHT)

FROM [POW].[dbo].[FACT_HA_AUR_ARTMONNP_ALL]
  Where datekeyAUR = '0_22000101')

 FROM [POW].[dbo].[FACT_HA_AUR_ARTMONNP_ALL]
  Where datekeyAUR = '0_21000101'

ABER... ich weiß nun nicht wie ich das mit mehreren Werten gleichzeitig hinbekomme.
 
keine Ahnung, ob ich Dich richtig verstehe ...

Code:
test=*# select * from ich_hh ;
 kunde |   datum    | s1 | s2  
-------+------------+----+-----
     1 | 2020-01-01 |  3 |   5
     1 | 2020-01-31 |  4 |   6
     2 | 2020-01-01 |  7 |   9
     2 | 2020-01-31 |  8 |  10
     3 | 2020-01-01 |  2 |   9
     3 | 2020-01-31 |  3 | 100
(6 rows)

test=*# with s1 as (select kunde, s1*s2 as x from ich_hh where datum = '2020-01-31'), s2 as (select kunde, s1*s2 as y from ich_hh where datum = '2020-01-01') select *, x-y  as "x-y" from s1 left join s2 on (s1.kunde=s2.kunde);
 kunde |  x  | kunde | y  | x-y
-------+-----+-------+----+-----
     1 |  24 |     1 | 15 |   9
     2 |  80 |     2 | 63 |  17
     3 | 300 |     3 | 18 | 282
(3 rows)

test=*#
 
summe aus (3+4)-Summe aus (5+6) sind 4.

das wären aber -4 dann.

Code:
test=*# with s1 as (select kunde, sum(s1) as x from ich_hh  group by kunde), s2 as (select kunde, sum(s2) as y from ich_hh group by kunde) select *, y-x  as "y-x" from s1 left join s2 on (s1.kunde=s2.kunde) order by s1.kunde;
 kunde | x  | kunde |  y  | y-x
-------+----+-------+-----+-----
     1 |  7 |     1 |  11 |   4
     2 | 15 |     2 |  19 |   4
     3 |  5 |     3 | 109 | 104
(3 rows)


--
-- oder
--

test=*# with s1 as (select kunde, sum(s1) as x from ich_hh  group by kunde), s2 as (select kunde, sum(s2) as y from ich_hh group by kunde) select *, x-y  as "x-y" from s1 left join s2 on (s1.kunde=s2.kunde) order by s1.kunde;
 kunde | x  | kunde |  y  | x-y  
-------+----+-------+-----+------
     1 |  7 |     1 |  11 |   -4
     2 | 15 |     2 |  19 |   -4
     3 |  5 |     3 | 109 | -104
(3 rows)
 
Vielen Dank dafür. Das Ergebnis von Kunde und x-y würde vollkommen reichen.
Ich habe das auch mal versucht bei mir anzuwenden, allerdings scheinst du nicht MS SQL zu nutzen oder?
Hast du einen Ansatz wie das in MS SQL Sprache angewendet werden müsste?
 
Werbung:
Zurück
Oben