-
SQL Problem
Ich habe folgende Abfrage erstellt:
Select T1.ARKDUN as Fzg ,T1.ARSN as SeNr, T2.ARRGW as Gewicht,T2.ARFB as Fracht , T3.ARNBB as Verpackung, T3.ARNBB as Nebenkosten
From TM1DTA.AUHD0P as T1 left Join TM1DTA.AUS2BP as T2 on T1.ARSN = T2.ARSN left outer JOIN TM1DTA.AUS3NP as T3 on T1.ARSN = T3.ARSN And (NOT(T3.ARNBS = "SS")) And T3.ARTEIL IN ('V')
where (T1.ARNL = 88) AND (T2.ARNL = 88) AND (T3.ARNL = 88) AND (T1.ARREL BETWEEN 699 AND 929) AND (T1.ARKDUN BETWEEN 42011 And 44015) AND (T2.ARTEIL = 'V') AND (T3.ARTEIL = 'V') AND (T1.ARDTAB = " & datvon & ")
GROUP BY T1.ARSN,T1.ARKDUN,T2.ARRGW,T2.ARFB,T3.ARNBB
ORDER BY T1.ARSN
Nun kann der Spalte ARNBB mehrere Werte enthalten(Wert ist der Betragz.B. 5,00 Euro). Dieser ist abhängig von ARNBS in dem steht was es für ein Wert ist, also z.B. Nebenkosten oder Verpackungskosten...
Jetzt möchte ich nur einen Datensatz für eine SENR. (Sendungsnummer) ausgegeben haben.
Mehrere Werte in ARNBB ergeben aber mehrere Datensätze. Gibt es keine Möglichkeit die verschiedenen ARNBB hintereinander in einem Datensatz anzugeben? Also z.b.
Select SeNr, ARNBB (where ARNBS="NB"),ARNBB (where ARNBS="VP")........ ?
-
Probier mal mit zwei LEFT OUTER JOINs, einmal als T3V für die Verpackung und einmal als T3N für die Nebenkosten, jeweils ergänzt um die entsprechende Bedingung für ARNBS.
-
Hallo,
du könntest das entweder in eine eigene Funktion verpacken oder mit Subselects arbeiten.
Code:
select
(select Tab2.spalte1 from Tabelle2 Tab2
where Tab2.Spalte2 = Tab1.Spalte1
fetch first row only) as Spalte1_Tab2,
Tab1.* from Tabelle1 Tab1
-
Wie immer gibts mehrere Möglichkeiten:
select ...
, (select sum(Wert) from tab1 b
where a.key = b.key and b.field='1'
) Kosten1
, (select sum(Wert) from tab1 b
where a.key = b.key and b.field='2'
) Kosten2
, ...
from tab1 a
where ...
Ggf. ist der Subselect noch in coalesce zu verpacken, da es durchaus auch mal keine Werte geben kann und wenn man NULL nicht verarbeiten will:
coalesce( (Subselect), 0) KostenX
Da du auch noch Group By hast, ist der Subselect noch mal zu aggregieren:
sum( coalesce( (Subselect), 0) ) KostenX
-
Neues Problem
Hab mit neuen left join die Tab ein 2. mal eingebunden. Aber nun werden Datrensätze die nur ARNBS=72 habne nicht mehr ausgegeben. Da ja die linke 'Seite der join Verbindung kein Ergebnis liefert(heist T3.ARNBS = 48 is False).
From ((TM1DTA.AUHD0P as T1 left Join TM1DTA.AUS2BP as T2 on T1.ARSN = T2.ARSN) left JOIN TM1DTA.AUS3NP as T3 on T1.ARSN = T3.ARSN And T3.ARTEIL IN ('V')And T3.ARNBS = 48 ) left JOIN TM1DTA.AUS3NP as T4 on T1.ARSN = T4.ARSN And T4.ARNBS = 72 And T4.ARTEIL IN ('V')
Ich möchte aber den Datensatz entweder mit ARNBS = 48 oder ARNBS = 72 ausgeben lassen. Ich hoffe ich drücke mich verständlich genug aus!?
-
Da stimmt was mit der Klammerung nicht. Mach mal alle Klammern weg bis auf die bei den beiden INs.
-
Auch ohne Klammern, werden keine Datensätze ausgegeben, in denen nur T4.ARNB vorkommt.
-
Ist vielleicht in der restlichen Abfrage, also in der WHERE-Bedingung, noch irgendwo ein Bezug auf T3 oder T4?
-
And T3.ARNBS = 48
And T4.ARNBS = 72
Diese Beschränkung habe ich im where probiert oder wie jetzt zu sehen als Bedingung im From... left join ....
-
Erklärung am Beispiel
Bin am verzweifeln! Vielleicht eine andere Erklärung des Problems.
Nr.|PersNr.|Name|Art |Betrag
1 |1000 |Wer |Kosten |100
2 |1001 |Wies |Erlöse |100
3 |1000 |Wer |Erlöse |105
4 |1001 |Wies |Kosten |99
Also 1 Tab mit 4 Spalten.
als Ausgabe sollten jetzt 2 Datensätze ausgegeben werden. Nämlich:
"1000,Wer,100,105" und
"1001,Wies,100,99"
Nicht 4 Datensätze und auch nicht zusammengefasste Kosten und Erlöse.
Wie bekomme ich das hin???
-
Dieses Thema wurde schon öfters im Forum diskutiert.
Da hilft nix anderes als Programmieren.
In einer Schleife einlesen und Daten verarbeiten.
-
Nr.|PersNr.|Name|Art |Betrag
1 |1000 |Wer |Kosten |100
2 |1001 |Wies |Erlöse |100
3 |1000 |Wer |Erlöse |105
4 |1001 |Wies |Kosten |99
select PersNr, Name
,sum(select sum(Betrag) from Datei B where a.Persnr=b.persnr and b.Art='Kosten') Kosten
,sum(select sum(Betrag) from Datei C where a.Persnr=C.persnr and C.Art='Erlöse') Erloese
from Datei A
group by PersNr, Name
Similar Threads
-
By Stefan_Sk in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 26-05-06, 16:37
-
By Lucky4712 in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 24-05-06, 15:57
-
By cbe in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 08-06-05, 16:21
-
By itec01 in forum IBM i Hauptforum
Antworten: 9
Letzter Beitrag: 16-09-04, 18:38
-
By rebe in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 07-09-01, 13:55
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks