Registriert seit: 27. Nov 2017
2.508 Beiträge
Delphi 7 Professional
|
AW: Fehler bei Left Join
13. Sep 2021, 19:45
Vermutlich sollte Dein SQL in etwa so aussehen, damit es per HeidiSQL oder sonsteiner Datenbankoberfläche ausführbar ist.
SQL-Code:
SELECT
a.zynrefkl AS 'Artikelnummer',
a.afg_oms1 AS 'Artikelbezeichnung 1',
concat('VPE:',a.per__chk,' Stück') AS 'Artikelbezeichnung 2',
'' AS 'Artikelbezeichnung 3',
'' AS 'Artikelbezeichnung 4',
'' AS 'Artikelbezeichnung 5',
'' AS 'Artikelbezeichnung 6',
b.in__vrrd AS 'Bestand',
a.per__chk AS 'Abgreifmenge',
a.minstock AS 'Mindestbestand',
CASE WHEN b.in__vrrd < a.minstock THEN
'Mindestmenge unterschritten'
ELSE
''
END AS 'Bestandskommentar',
'' AS 'Kommentar',
(
SELECT SUM(COALESCE(c.b_aantal,0))
FROM bstlyn__ c
WHERE c.afg__ref = a.afg__ref
AND c.levv_dat < GETDATE()
AND c.lbn__ref = ''
) AS 'Rückstand',
(
SELECT SUM(COALESCE(d.aant_uit,0))
FROM hisafg__ d
WHERE d.afg__ref = a.afg__ref
) AS 'Gesamtverbrauch'
FROM afgart__ a
LEFT JOIN afgant__ b ON b.afg__ref = a.afg__ref
LEFT JOIN gegdet__ e ON e.det__ref = a.afg__ref AND vrg__ref = '000002' AND tabname_ = 'afgart__'
WHERE a.kla__rpn = 'MEYLE'
AND a.zynrefkl <> ''
AND (e.antw_txt <> '1' OR e.antw_txt IS NULL)
GROUP BY a.zynrefkl, a.afg_oms1, b.in__vrrd, a.per__chk, a.minstock, a.afg__ref
ORDER BY a.zynrefkl
Um daraus nun kompilierbaren Delphiquelltext zu erhalten benötigt man ein TMemo (WordWrap := false), einen TButton und folgende Routine:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
begin
for i := 0 to Memo1.Lines.Count - 1 do Memo1.Lines[i] := Format(' Query.SQL.Add(%s);',[QuotedStr(Memo1.Lines[i])]));
Memo1.SelectAll;
Memo1.CopyToClipboard;
end.
Als Ergebnis erhält man den Quelltext, den man dann einfach in der IDE an der passenden Stelle (per Copy&Paste) einfügt:
Delphi-Quellcode:
Query.SQL.Add(' SELECT');
Query.SQL.Add(' a.zynrefkl AS '' Artikelnummer'' ,');
Query.SQL.Add(' a.afg_oms1 AS '' Artikelbezeichnung 1'' ,');
Query.SQL.Add(' concat('' VPE:'' ,a.per__chk,'' Stück'' ) AS '' Artikelbezeichnung 2'' ,');
Query.SQL.Add(' '' '' AS '' Artikelbezeichnung 3'' ,');
Query.SQL.Add(' '' '' AS '' Artikelbezeichnung 4'' ,');
Query.SQL.Add(' '' '' AS '' Artikelbezeichnung 5'' ,');
Query.SQL.Add(' '' '' AS '' Artikelbezeichnung 6'' ,');
Query.SQL.Add(' b.in__vrrd AS '' Bestand'' ,');
Query.SQL.Add(' a.per__chk AS '' Abgreifmenge'' ,');
Query.SQL.Add(' a.minstock AS '' Mindestbestand'' ,');
Query.SQL.Add(' CASE WHEN b.in__vrrd < a.minstock THEN');
Query.SQL.Add(' '' Mindestmenge unterschritten'' ');
Query.SQL.Add(' ELSE');
Query.SQL.Add(' '' '' ');
Query.SQL.Add(' END AS '' Bestandskommentar'' ,');
Query.SQL.Add(' '' '' AS '' Kommentar'' ,');
Query.SQL.Add(' (');
Query.SQL.Add(' SELECT SUM(COALESCE(c.b_aantal,0))');
Query.SQL.Add(' FROM bstlyn__ c');
Query.SQL.Add(' WHERE c.afg__ref = a.afg__ref');
Query.SQL.Add(' AND c.levv_dat < GETDATE()');
Query.SQL.Add(' AND c.lbn__ref = '' '' ');
Query.SQL.Add(' ) AS '' Rückstand'' ,');
Query.SQL.Add(' (');
Query.SQL.Add(' SELECT SUM(COALESCE(d.aant_uit,0))');
Query.SQL.Add(' FROM hisafg__ d');
Query.SQL.Add(' WHERE d.afg__ref = a.afg__ref');
Query.SQL.Add(' ) AS '' Gesamtverbrauch'' ');
Query.SQL.Add(' FROM afgart__ a');
Query.SQL.Add(' LEFT JOIN afgant__ b ON b.afg__ref = a.afg__ref');
Query.SQL.Add(' LEFT JOIN gegdet__ e ON e.det__ref = a.afg__ref AND vrg__ref = '' 000002'' AND tabname_ = '' afgart__'' ');
Query.SQL.Add(' WHERE a.kla__rpn = '' MEYLE'' ');
Query.SQL.Add(' AND a.zynrefkl <> '' '' ');
Query.SQL.Add(' AND (e.antw_txt <> '' 1'' OR e.antw_txt IS NULL)');
Query.SQL.Add(' GROUP BY a.zynrefkl, a.afg_oms1, b.in__vrrd, a.per__chk, a.minstock, a.afg__ref');
Query.SQL.Add(' ORDER BY a.zynrefkl');
Dürfte vermutlich schneller gehen, als alles per dutzender QuotedStr und vielen + als Einzeiler mit nur einem Query.SQL.Add irgendwie, hoffentlich kompilierbar, hinzubekommen und dann auch noch ein ausführbares SQL zu erhalten. Und das Nachzählen der ' kann dann auch entfallen
Auswand: 15 oder 30 Minuten?
(Einmalig und nicht bei jedem SQL auf's Neue )
Geändert von Delphi.Narium (13. Sep 2021 um 19:50 Uhr)
|