PDA

View Full Version : Sql-Abfrage



Seiten : 1 [2]

tarkusch
21-10-13, 14:43
Ich habe es vielleicht nicht genau beschrieben.
In der Datei File1p habe ich die Datei/Feld/ und Längeangaben erfasst und manuell eingetragen.
Dabei habe ich das Problem das die Kundennummer manchmal Numerisch und Alpha angeben wurde.

Ich soll eine Auswertung erstellen(FILE2P) erstellen Informationen gibt wie oft eine Kundennummer in unserem System vorkommt(
Kundennummer 273 kommt in
file1p.Datei, file1p.Feld x 10 mal vor
file1p.Datei, file1p.Feld y 5 mal vor etc.

Ich begreife nicht wie ich da einen Index erstellen soll, da die Datei File1p nur Definitionen beinhaltet.

lg

Pikachu
21-10-13, 14:59
Sammel doch alle Kundennummern mitsamt Anzahl in jeder Teildatei auf einmal ein. Etwa so für jeden Eintrag in FILE1P:

INSERT INTO FILE2P
SELECT KDNR,"Teildatei","Feld",COUNT(*) FROM Teildatei
WHERE Feld = KDNR GROUP BY KDNR ORDER BY 1, 2, 3

Fuerchau
21-10-13, 15:37
Was enthält dann deine KUNDENP?
Ich dachte, das Feld KDNNR aus der KUNDENP sind die zu ermittelnden Kunden?
Die KUNDENP sollte über das Feld KDNNR einen Index erhalten!!!

Dann baust du dir deine SQL's zusammen.

SQLFill = 'INSERT INTO FILE2P ' +
'SELECT char(' + FELDNAME + '), min(''' + TEILDATEI + '''), min(''' + FELDNAME + '''), count(*) from ' + TEILDATEI + ' A ';

IF %SCAN('A':FELDLAENGE) = *ZEROS;
SQLFill +=
' WHERE exists (select * from KUNDENP P where dec(A.' + FELDNAME + ', 7, 0) = P.KDNNR + ')';
ELSE;
SQLFill +=
' WHERE exists (select * from KUNDENP P where A.' + FELDNAME + ' = P.KDNNR + ')';
ENDIF;

SQLFill += ' group by char(' + FELDNAME + ')';

exec sql execute :SQLFill;

Einen eigenen Fetch/Write brauchst du da nicht.

tarkusch
22-10-13, 07:08
Morgen,

das Statement ist so was von genial, das einzige war wir unklar ist warum wurde im 1. Select ein Min('TEILDATEI') angegeben?

Danke noch mal

Fuerchau
22-10-13, 07:38
Der Grund ist der "group by".
Ein Feld ohne Aggregat-Funktion muss in der Liste der Group-By aufgeführt werden.
Hierbei ist auch ein Ausdruck möglich:

group by ..., 'TEILDATEI', ...

Da du aber eine Konstante verwendest, liefert ja MIN immer den richtigen Wert so dass man sich Group By eben sparen kann.

PS:
Für meine Genialität werde ich an sonsten bezahlt :):):).

malzusrex
22-10-13, 08:32
PS:
Für meine Genialität werde ich an sonsten bezahlt :):):).

http://www.malzi.de@www.malzi.de/newsolutions-forum/geldhaufen.jpg

tarkusch
22-10-13, 09:20
so, jetzt habe ich ein schlechtes Gewissen.

Bin aber jedem den Geldhaufen vergönnt.

:)

Pikachu
22-10-13, 10:37
Peanuts ;)

http://i2.wp.com/thewow.com.mx/wp-content/uploads/2013/03/trillones.jpg