-
Problem mit einer SQL-Abfrage
Hallo zusammen,
ich habe ein Problem mit einer SQL-Abfrage, wo ich leider absolut keine Lösung habe da ich den Fehler nicht sehe 
Fehlermeldung
Code:
QL-Status: 42601
Vendorencode: -104
Nachricht: [SQL0104] Token 01 ungültig. Gültige Token: ) FETCH...
Hier die Abfrage
Code:
SELECT DISTINCT
T01.FLD1,T01.FLD2, COUNT(T02.FLD2), SUM(T02.FLD3),
T03.FLD1
FROM TAB1 AS T01
left JOIN TAB2 AS T02 ON
T01.KEY1=T02.KEY1 AND T01.KEY1=T02.KEY2
left join (SELECT DISTINCT FT1, FT2, SUM(FT3) AS MENGE from TAB3
WHERE FLD8='931' AND FLD14='02' and FLD15='01 order by FT1, FT2 group by FT1, FT2) AS T03 ON
T03.FT1=T01.KEY1 and T03.FT2=T01.KEY2
WHERE T01.KEY1='01' and T01.FLD5='A' AND T02.FLD3>0
GROUP BY T01.KEY1, T01.BEZ
ORDER BY T01.KEY1
Danke an alle Helfenden
-
Hochkomma vergessen.
1.
Bessere mal
auf
aus.
2.
Im JOIN wird
PHP-Code:
T01.KEY1=T02.KEY2
wohl auch auf
PHP-Code:
T01.KEY2=T02.KEY2
auszubessern sein.
3.
Und das "GROUP BY" im Subselect mag er bei mir auch nicht.
(Diese Liste erhebt keinen Anspruch auf Vollständigkeit. )
-
 Zitat von Anton Gombkötö
3.
Und das "GROUP BY" im Subselect mag er bei mir auch nicht.
... zumindest sollte der ORDER BY im Sub-Select entweder weggelassen werden oder zumindest erst nach dem GROUP BY angegeben werden.
Vor 6.1 waren außerdem ORDER BY-Anweisungen im Sub-Select nicht erlaubt.
... und die DISTINCTS kannst Du Dir auch schenken, das ist doppelt gemoppelt.
Birgitta
-
Danke !!!
Das Probkem lag tatsächlich am
Code:
and FLD15='01 <<-- FEHLENDES '
DANKE 
Allerdings habe jetz jetzt ein left Problem 
T01 = Artikelstamm (Jede Artikel-Nr ist einalig)
T02 = Paletten Datei (Es gibt bsp. 18. Paletten zu einem Produkt)
T03 = Lagerbewegungsdatei
(Menge ist der Vebrauch)
Jetzt habe ich das Problem, das der Verbrauch multipliziert mit der Anzahl der Paletten ausgeweisen wird!
Wie bekomme ich es hin, das entweder
1. Der Vebrauch direkt mit dem Artikelstamm verknüpft wird
2. Muss ich auch für die Palettendatei ein SubSelect machen?
Danke
-
Hallo,
da ich auch kein SQL Spezialist bin, und bei den verschatelten SQL-Statements immer auf die Nase falle, fand ich den Artikel von Brigitta bezgl. der UDFs ganz toll, da kann man die Aufgabe auf einzelne Abfragen runterbrechen.
Ich würde also ein SQL-Statement als UDF machen welches mir nur die Paletten zu einem Artikel anzeigt, ein weiteres welches mir nur den Verbrauch anzeigt und das dann in ein SQL-Statement zusammenbasteln.
Ist für mich dann übersichtlicher und nachvollziehbarer.
GG
-
 Zitat von KingofKning
Hallo,
da ich auch kein SQL Spezialist bin, und bei den verschatelten SQL-Statements immer auf nie Nase falle, fand ich den Artikel von Brigitta bezgl. der UDFs ganz toll, da kann man die Aufgabe auf einzelne Abfragen runterbrechen.
Ich würde also ein SQL-Statement als UDF machen welches mir nur die Paletten zu einem Artikel anzeigt, ein weiteres welches mir nur den Verbrauch anzeigt und das dann in ein SQL-Statement zusammenbasteln.
Ist für mich dann übersichtlicher und nachvollziehbarer.
GG
Danke für das Lob,
aber ... in diesem Fall machen UD(T)Fs aus Perfomance Gründen keinen Sinn. Darauf hatte ich in dem Artikel auch extra hingewiesen.
Sinn machen dagegen durch aus Common Table Expressions (CTE), um die Abfrage aufzuteilen. M.E. sind sie leichter zu lesen als verschachtelte Sub-Selects.
Etwa so:
Code:
With a as (Select Fld1, Fld2, Key1, Key2
From Tab01
Where Key1 = '01' and Fld5 = 'A'),
b as (Select a.*, x.Fld2 as BFld2, x.Fld3 as BFld3
From a Left join Tab02 x on a.Key1 = x.Key1
and a.Key2 = x.Key2
Where Fld3 > 0),
c as (Select FT1, FT2, Sum(FT3) as Menge
From TAB03
Where Fld8='931' and Fld15='01'
Group By FT1, FT2)
SELECT b.Fld1, b.Fld2, Count(BFld2), Sum(BFld3), Menge
FROM b left Outer Join c on FT1 = KEY1
and FT2 = KEY2
GROUP BY b.Fld1, b.Fld2
ORDER BY b.Fld1, b.Fld2
Birgitta
-
Manchmal ist Geschwindigkeit nicht alles,
manchmal ist es schon schön das es funktioniert ;-)
GG
-
Hab es jetzt mal gelöst und es scheint zu funktionieren (Werte sind Stichprobenartik korrekt)
Statement sieht jetz wie folgt aus:
Code:
SELECT T01.FLD01 AS "Artikel-Nr", T01.FLD02 AS "Bezeichnung", COALESCE(SUM(T02.ANZPAL), 0) as "Anzahl Paletten", COALESCE(SUM(T02.BEST),0) as "Bestand",
COALESCE(SUM(T03.MENGE) , 0) AS "Verbrauch lfd. Jahr", COALESCE(SUM(T03.MENGE), 0)/(5*WEEK_ISO(CURDATE())) AS "durchn. Verbrauch pro Tag"
FROM ARTIKELSTAMM T01
LEFT JOIN
(SELECT BLD01, BLD02, COUNT(BLD03) AS ANZPAL, SUM(BLD04) AS BEST FROM PALETTENDATEI
WHERE BLD04>0
GROUP BY BLD01, BLD02) AS T02 ON
TS01=BLD01 AND FLD01=BLD02
CROSS JOIN
(SELECT CLD01, CLD02, SUM(CLD03) AS MENGE FROM LAGERBEWEGUNGSDATEI
WHERE CLD04='931' AND CLD05='02' AND CLD06='01' AND CLD07=CHAR(YEAR(CURRENT DATE))
GROUP BY CLD01, CLD02 ) AS T03
WHERE T01.KEY01='01' AND T01.STAT='A'
AND KEY01=CLD01 AND FLD01=CLD02
GROUP BY T01.FLD01 , T01.FLD02
ORDER BY T01.FLD01
Danke an alle die mir bei der Lösungssuche geholfen haben.
Similar Threads
-
By AS400-Anfänger in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 27-06-06, 13:18
-
By Stefan_Sk in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 26-05-06, 16:37
-
By steven_r in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 17-05-06, 15:49
-
By cbe in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 08-06-05, 16:21
-
By HoScHiE in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 04-10-01, 14:24
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