-
Das ist jetzt aber eine andere Aufgabe als die vorhergehende!?
-
im endeffekt nicht.
es geht nur darum ob man eine if abfrage einbauen kann.
ist das gleich mit dem dann tu das usw und ob es möglich ist in der ersten select anweisung ein feld z.b. ort aus zwei unterschiedlichen dateien zu füllen je nachdem welche bedingung erfüllt ist.
on jetzt ankunde = X
oder ob a.rechnr = b. rechnr
das kommt ja aufs gleich raus oder??
sollte ja nur ein beispiel sein!!
wie gesagt es geht nur darum ist das überhaupt möglich in einer abfrage unterzubringen!!! und wenn ja wie?
aber trotzdem danke erstmal für die zeit die du aufgebracht hast.
-
Was spricht denn gegen zwei SELECTs, verbunden durch ein UNION?
Code:
SELECT F.RECHNR, F.ANSKUNDE, F.KUNDENNR,
SUBSTR(A.FELD1, 1, 4) AS NAME,
SUBSTR(A.FELD1, 5, 6) AS STRASSE,
SUBSTR(A.FELD1, 11, 3) AS ORT
FROM FILE F INNER JOIN FILEA A ON F.KUNDENNR=A.KUNDENNR
WHERE ANSKUNDE ='X'
UNION
SELECT F.RECHNR, F.ANSKUNDE, F.KUNDENNR,
SUBSTR(B.FELD1, 1, 4) AS NAME,
SUBSTR(B.FELD1, 5, 6) AS STRASSE,
SUBSTR(B.FELD1, 11, 3) AS ORT
FROM FILE F INNER JOIN FILEB B ON F.KUNDENNR=B.KUNDENNR
WHERE ANSKUNDE <>'X'
-
aber bei union muss ja datei a unb den geleichen satzaufbau haben oder??
den haben sie definitiv nicht
-
 Zitat von woodstock99
aber bei union muss ja datei a unb den geleichen satzaufbau haben oder??
den haben sie definitiv nicht
Bei UNION müssen nur die verbundenen SELECTs den gleichen Satzaufbau besitzen.
-
danke erstmal für die antwort. ich werde es am montag mal ausprobieren ob es klappt. vielen dank erstmal
-
Alles viel einfacher:
select ...
case
when anskunde = 'X' then
a.feld1
else
b.feld1
end as feld1
,
case
when anskunde = 'X' then
a.feld2
else
b.feld2
end as feld2
:
:
from myfile
left join filea a on ...
left join fileb b on ...
where ...
Für jedes Feld ist eine Case-Ausdruck erforderlich.
Durch den "left join" ist sichergestellt, dass aus MyFile alle und aus FileA und FileB die vorhandenen Sätze gewählt werden.
Ggf. kann per "coalesce(f.feldx, ' ')" ein NULL-Wert ausgeschlossen werden.
Union ist nicht unbedingt die ideale Lösung.
-
Hallo,
also zuerst einmal Danke an alle.
Ich habe mich für die Version von Herrn Fuerchau entschieden.
Mein Select
select cast(substr(digits(A.DATUM), 5, 2) as numeric) as jahr ,
cast(substr(digits(a.datum) , 3, 2) as numeric) as monat,
cast(substr(digits(a.datum) , 1, 2) as numeric) as tag,
a.rechnr, anskunde, kundennr,
case when Anskunde = 'X'
then
substr(z.f00002 , 5, 10)
else
y.anschri2
end as ort
from Qs36f/DebiSudl as a
left outer join qs36f/KDSTAMM as Z on kundennr = z.k00001
left outer join qs36f/debisudt as Y on a.rechnr = y.rechnr
and y.umerkmal = '3'
so nun hätte ich noch zwei Fragen.
Frage 1:
Kann ich das Feld Ort das ich mir erzeuge durch ' end as ort ' irgendwie noch abfragen??
z.B. where Ort Like '%berg%'
In der where Klausel wenn ich es mit einbaue kommt immer die Fehlermeldung ' Feld nicht in Tabelle' .
Frage 2:
Das Feld A.Adatum ist ein 6 0 Feld in der Datei. Gefüllt mit ttmmjj.
(Das ist echt eine Datenhaltung die wir hier haben das es der Sau graust )
kann man das in ein echtes Datumsfeld umwandeln ??
Mit Date oder??
Aber dazu müsste ich dann beim Jahr 1900 oder 2000 addieren .
Dies kann ich wahrscheinlich wieder mit Case abfragen oder??
Zur Erkärung. Der User soll die möglichkeit haben Datensätze per Datum einzuschränken. aber das Datum in der Datei ist wie immer bei uns kein Datumsfeld .
Danke nochmal.........
-
ok dass das Datum jetzt zumindest
6-stellig richtig kommt hab ich es so gemacht
char(
substr(digits(A.DATUM), 5, 2) concat
substr(digits(a.datum) , 3, 2) concat
substr(digits(a.datum) , 1, 2) ) as neu,
-
Natürlich kannst du alles mit case abfragen.
Um ein Datum zu erstellen, musst du ein Datumsformat übergeben, am besten eben ISO 'JJJJ-MM-TT'.
z.B.:
date(
case when substr(digits(mydate), 5, 6)) < '70' then '20' else '19' end
concat '-' concat substr(digits(mydate, 3, 2)) concat '-' concat substr(digits(mydate), 1, 2)))
Mit Where-Bedingung wirds etwas kompliziert, da Ergebnisfelder zu diesem Zeitpunkt noch nicht exisitieren, der gesamte case-Ausdruck ist in diesem Fall also komplett zu wiederholen und dann auch abfragbar:
where ... and case ... end = Wert
Werden aber Felder aus Leftjoin abgefragt, macht man daraus schnell Innerjoin's, da man auch "is null" benötigt.
where (leftjoinfiled is null or leftjoinfield = Wert) ...
alternativ
where coalesce(leftjoinfield, Defaultwert) = Wert
Kombiniere dies dann nun auch noch mit case und die Übersichtlichkeit verbessert sich nicht gerade.
Am einfachsten wirds dann aber mit CTE's:
with
mySelect as (fullselect)
select * from mySelect
where ErgField=Wert
Durch "as (fullselect)" exisitieren nun die Ergebnisfelder.
-
Sorry aber das muß ich jetzt los werden du bist mein Held .
Funktioniert super.
Das mit dem with as ist der Bringer.
Ausserdem hab ich durch diesen ganzen Sums hier noch gelernt das man keine Sichten auf Programmbeschriebene Dateien machen kann.
Hoffe diese Aussage stimmt.
Vielen vielen dank nochmal!!!
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