PDA

View Full Version : SQL-Problem



jogisarge
06-12-06, 13:34
Hallo zusammen!

Ich habe ien Problem mit einer SQL-Abfrage und brauche eure Hilfe.

Ich muss von einem PC über ODBC Daten auf der AS400 lesen.
Ich habe nun im Kundenstamm ein Feld für den Ansprechpartner Innendienst KUANID, und ein Feld für den Ansprechpartner Aussendienst KUANAD.
Die beiden Felder sind 3 stellig und numerisch.
Bei einem Kunden steht im Feld KUANID 003.

Die Tabelle User hat 4 Felder.
key1 ALPHA(1),key2 ALPHA(1),key3 ALPHA(1),text ALPHA(30)

Um nun den Ansprechpartner von oben zu bekommen,
wird key1 mit 0 , key2 mit 0 und key3 mit 3 gefüllt.

Der Tabellenaufbau ist uralt und kann von mir nicht geändert werden.

Ich versuche nun mit einem SQL-Statement den Kundensatz, und gleich die Ansprechpartner(Text) zu lesen.

Mein Versuch:
Select * from kustp, (Select text from ANSP where
key1='SUBSTR(DIGITS(KUANID),1,1)' and
key2='SUBSTR(DIGITS(KUANID),2,1)' and
key3='SUBSTR(DIGITS(KUANID),3,1)' ) AS anspad

-> das geht so net

Hat jemand ne Idee ?

GRuß jogi

malzusrex
06-12-06, 13:42
Select kustp.*, ansp.text
from kustp, ansp
where key1= SubStr(Digits(KUANID), 1, 1)
and key2= SubStr(Digits(KUANID), 2, 1)
and key3= SubStr(Digits(KUANID), 3, 1)


versuche das mal.
ungetestet
gruß ronald

jogisarge
06-12-06, 13:59
Hallo nochmal!

Ich muss mein SQL-Statement verbessern:
Select * from kustp, (Select text from ANSP where
key1='SUBSTR(DIGITS(KUANID),1,1)' and
key2='SUBSTR(DIGITS(KUANID),2,1)' and
key3='SUBSTR(DIGITS(KUANID),3,1)' ) AS anspid,
(Select text from ANSP where
key1='SUBSTR(DIGITS(KUANAD),1,1)' and
key2='SUBSTR(DIGITS(KUANAD),2,1)' and
key3='SUBSTR(DIGITS(KUANAD),3,1)' ) AS anspad
where kuknr = 4711

Ich benötige den Text der Ansprechpartner für beide Felder
(KUANID und KUANAD) in einer Ausgabezeile !

Gruß Jogi

Fuerchau
06-12-06, 14:01
Substr ist doch die SQL-Funktion !
Lass das Hochkomma weg.
Das 2. Problem ist das Komma, da es ggf. als Dezimalkomma interpretiert wird, daher ein Leerzeichen vor der Ziffer.

Select * from kustp, (Select text from ANSP where
key1=SUBSTR(DIGITS(KUANID), 1, 1) and
key2=SUBSTR(DIGITS(KUANID), 2, 1) and
key3=SUBSTR(DIGITS(KUANID), 3, 1) ) AS anspad

@Ronald
Subselect geht auch an Stelle einer Tabelle.

Fuerchau
06-12-06, 14:05
Betrachte mal deinen SQL genau !
Du machst hier einen Cross-Join, da du keine Beziehung definiert hast.
Zwischen KUST und ANSP muss es eine Beziehung geben, die du am besten in die Where-Klausel legst.
Allerdings benötigst du hierfür die Schlüsselfelder zusätzlich.

Ronalds Weg ist da der bessere, da du direkt die Beziehung und Felder definieren kannst.

mwithake
06-12-06, 14:32
Hallo,

die FROM-Anweisung steht an der falschen Stelle:

Select kustp.*, (Select text from ANSP where
key1=SUBSTR(DIGITS(KUANID), 1 , 1) and
key2=SUBSTR(DIGITS(KUANID), 2 , 1) and
key3=SUBSTR(DIGITS(KUANID), 3 , 1) ) AS anspid,
(Select text from ANSP where
key1=SUBSTR(DIGITS(KUANAD), 1 , 1) and
key2=SUBSTR(DIGITS(KUANAD), 2 , 1) and
key3=SUBSTR(DIGITS(KUANAD), 3 , 1) ) AS anspad
from kustp
where kuknr = 4711

Gruß
M.Withake

Fuerchau
06-12-06, 14:44
DAS ist eine Frage der Betrachtungsweise.
- Singlefield-Subselect
- Join-Subselect

Was will der Programmierer !?

mwithake
06-12-06, 14:53
DAS ist eine Frage der Betrachtungsweise.
- Singlefield-Subselect
- Join-Subselect

Was will der Programmierer !?

Das hat der Programmierer doch angegeben:


Ich benötige den Text der Ansprechpartner für beide Felder
(KUANID und KUANAD) in einer Ausgabezeile !