PDA

View Full Version : sql problem



Seiten : [1] 2 3

woodstock99
13-06-08, 07:47
Hallo,

ich hätte mal eine Frage.

ich muß aus einer Datei Datensätze über bestimmte Filtervorgaben die der User eingibt filtern und in eine Datei schreiben.

Gibt es jetzt in SQL die möglichkeit eine Art If-Abfrage einzubauen???
wenn anskunde = X dann innerjoin Datei A
else inner join Datei B

select rechnr, anskunde, KUNDENNR, ort, plz, name from QS36f/debisudl
left outer join qs36f/KDSTAMM on kundennr = k00001

ergibt z,b folgendes
RECHNUNGSNUMMER ANSCHRIFTINKUNDENAD KUNDENNR
1 Zeile:00199 . 69.531
2.Zeile:00251 X 78.913

Wenn jetzt ein X in ANSCHRIFTKUNDENAD steht muß die Adresse von Datei A genommen werden
wenn nicht dann von Datei B. kann man das in einer Anweisung realisieren??

Die drei Felder(RECHNR,ANSKUNDE,KUNDENNR kommen aus debisudl)

Die Felder Ort,Name,PLZ sollen aus Datei A oder B kommen.

Nicht das ich falsch verstanden werde aber ich will die Datei durch eine SQl Anweisung komplett füllen .


Sorry aber in SQL bin ich nicht so fit :(.


kann man das mit
select rechnr, anskunde, KUNDENNR, ort, plz, name from QS36f/debisudl
CASE
WHEN anskunde = X
select substr(feld1,2,10) as ort ,substr(feld1,2,10) as plz,substr(feld1,2,10) as name from a
else
select substr(feld3,21,10) as ort,substr(feld3,2,10) as plz ,substr(feld3,50,10) as name from B..
end

Die Dateien A und B sind intern beschrieben erstellt worden

Pikachu
13-06-08, 09:10
Das könnte vielleicht in etwa so gehen:

SELECT * FROM FILE F INNER JOIN FILEA A ON F.NUM=A.NUM WHERE TYP ='X'
UNION
SELECT * FROM FILE F INNER JOIN FILEB B ON F.NUM=B.NUM WHERE TYP<>'X'

woodstock99
13-06-08, 09:25
habe ich mir auch schon überlegt aber das Problem ist dann wie fülle ich die Felder Ort,plz,name???

Sie sollen ja einmal von dieser Datei gefüllt werden und einmal von der anderen.
Dazu kommt noch das die Feldnamen in Datei A und B unterscheidlich sind und das ich bei Datei A die Werte mittels substr auslesen und dem Feld Ort usw zuweisen muß. Dito Datei B.


Nochmal ein Beispiel.

D I E S E R S E L E C T soll nur ein Beispiel sein. Er löst auf keinen Fall das Problem das ich hab. evtl kann ihn ja jemand so erweitern das es dann funktionieren würde!!!


select A.rechnr, A.anskunde, A.KUNDENNR, ort ??? einmal aus datei a kommen andere mal aus datei B
from QS36f/debisudl as a, Qs36F/KDSTAMM as B, qs36f/debisudl As C
where a.kundennr = b.k00001 or ( soll nur ausgeführt werden wenn a.kundennr <> b.k00001 ist ) a.Rechnr = C.rechnr

also wenn a.kundennr = b.k00001 nicht vorhanden ist dann sollte a.Rechnr = C.rechnr greifen.

und das Feld ORT sollte wenn
a.kundennr = b.k00001
mittels substr(b.f00002, 5, 20) gefüllt werden

else
when a.Rechnr = C.rechnr
mittels substr(b.f00003, 21, 20) gefüllt werden
.

Wie gesagt geht das überhaupt???

Pikachu
13-06-08, 09:38
Das ist jetzt aber eine andere Aufgabe als die vorhergehende!?

Pikachu
13-06-08, 09:50
und das Feld ORT sollte wenn
a.kundennr = b.k00001
mittels substr(b.f00002, 5, 20) gefüllt werden

else
when a.Rechnr = C.rechnr
mittels substr(b.f00003, 21, 20) gefüllt werden
Ist das wirklich "b.f00003"? Welcher Datensatz aus Datei b ist dann damit gemeint?

woodstock99
13-06-08, 09:50
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.

Pikachu
13-06-08, 10:06
Was spricht denn gegen zwei SELECTs, verbunden durch ein UNION?
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'

woodstock99
13-06-08, 10:19
aber bei union muss ja datei a unb den geleichen satzaufbau haben oder??
den haben sie definitiv nicht

Pikachu
13-06-08, 10:29
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.

woodstock99
13-06-08, 12:18
danke erstmal für die antwort. ich werde es am montag mal ausprobieren ob es klappt. vielen dank erstmal