![]() |
AW: ADOQuery berechnetes Feld
Hallo,
habe mir alle Vorschläge zu Herzen genommen, vor allem die von Delphi.Narium und folgende SELECT-Abfrage gebastelt:
Delphi-Quellcode:
Jetzt werden mir die Daten in der DBGrid angezeigt und ich bin fast glücklich. Es werden mir jetzt Materialien angezeigt, deren (Materialrollen.[Arb-Breite] > 179 (mm)ist. Alle Materialrollen, deren die [Arb-Breite] <= 179 werden nicht angezeigt, was korrekt ist. Der Fall jedoch, wo es kein Material auf Lager gibt, weil verbraucht, geht verloren.
SELECT Materialrollen.[Mat-Nr], sum((Materialrollen.[Arb-Breite] / 1000) * Materialrollen.lfm) as BESTAND, [Material-Stamm].Bezeichnung
FROM Materialrollen LEFT JOIN [Material-Stamm] ON Materialrollen.[Mat-Nr] = [Material-Stamm].[Mat-Nr] WHERE (([Material-Stamm].[Lieferanten-Nr] = ' + Lieferantennr.Text + ') AND ([Material-Stamm].aktuell= -1) AND (Materialrollen.DatumAb is NULL) AND (Materialrollen.[Arb-Breite] > 179)) group by Materialrollen.[Mat-Nr], [Material-Stamm].Bezeichnung Hat Jemand, bitte, eine Idee, wie man das noch zusätzlich einbaut. Danke, Luckner |
AW: ADOQuery berechnetes Feld
Hallo,
or (Feld x is Null) or (Feld1=Feld2) ?? Ich kenne deine Datenstruktur ja nicht. Wie erkennst Du, dass das Material aufgebraucht ist? Du kannst auch eine komplett neue Query "hintendranhängen" Select Query 1 Union Select Query 2 Es müssen nur die gleichen Datenfelder (Anzahl, Datentyp usw.) sein. |
AW: ADOQuery berechnetes Feld
Zitat:
Zu der Frage: Zitat:
so
Delphi-Quellcode:
oder
.. FROM Materialrollen RIGHT JOIN
[Material-Stamm] ON Materialrollen.[Mat-Nr] = [Material-Stamm].[Mat-Nr] so
Delphi-Quellcode:
.. FROM [Material-Stamm] LEFT JOIN
Materialrollen ON Materialrollen.[Mat-Nr] = [Material-Stamm].[Mat-Nr] |
AW: ADOQuery berechnetes Feld
Es kann auch sein, dass die Zusatzbedingungen den Left Join "kaputt machen".
Einfachste Möglichkeit das zu testen, wäre aus der Where Bedingung ein Teil des Joins zu machen. Also 'where' raus und große Klammer ab ..on.. Und nur weil wir grad dabei sind, vielleicht lässt Du Dich ja auch noch von Formatierung überzeugen. |
AW: ADOQuery berechnetes Feld
Hallo jobo,
habe ich geändert, jedoch ohne Veränderung in der Tabelle. Gruß, Luckner |
AW: ADOQuery berechnetes Feld
Was hast Du geändert? Ich habe so 3-4 Vorschläge gemacht.
Und was bedeutet, "ohne Änderung in der Tabelle"? |
AW: ADOQuery berechnetes Feld
Hallo jobo,
Zitat:
Wenn Material aufgebraucht ist, merke ich, wenn alle (Materialrollen.DatumAb <> NULL)ist. Also alle Materialrollen ein Abgangsdatum haben. Andererseits könnte es auch funktionieren, wenn man herausfindet, dass wenn das Produkt aus der Multiplikation = 0 ist. Irgendwas in dieser Richtung. Gruß, Luckner |
AW: ADOQuery berechnetes Feld
Ist jetzt nur geraten.
Sinngemäß in etwa sowas?
SQL-Code:
Die aufgebrauchten Materialien sollten nun in der Spalte "Aufgebraucht" einen entsprechenden Hinweise, bestehend aus den Wörten 'ja' bzw. 'nein', stehen haben.
SELECT
Materialrollen.[Mat-Nr], sum((Materialrollen.[Arb-Breite] / 1000) * Materialrollen.lfm) as BESTAND, [Material-Stamm].Bezeichnung, Aufgebraucht from ( SELECT Materialrollen.[Mat-Nr], Materialrollen.[Arb-Breite], Materialrollen.lfm, [Material-Stamm].Bezeichnung, 'nein' as Aufgebraucht FROM Materialrollen LEFT JOIN [Material-Stamm] ON Materialrollen.[Mat-Nr] = [Material-Stamm].[Mat-Nr] WHERE ( ([Material-Stamm].[Lieferanten-Nr] = ' + Lieferantennr.Text + ') AND ([Material-Stamm].aktuell= -1) AND (Materialrollen.DatumAb is NULL) AND (Materialrollen.[Arb-Breite] > 179) ) UNION ALL SELECT Materialrollen.[Mat-Nr], Materialrollen.[Arb-Breite], Materialrollen.lfm, [Material-Stamm].Bezeichnung, 'ja' as Aufgebraucht FROM Materialrollen LEFT JOIN [Material-Stamm] ON Materialrollen.[Mat-Nr] = [Material-Stamm].[Mat-Nr] WHERE ( ([Material-Stamm].[Lieferanten-Nr] = ' + Lieferantennr.Text + ') AND ([Material-Stamm].aktuell= -1) AND (Materialrollen.DatumAb is not NULL) AND (Materialrollen.[Arb-Breite] > 179) ) ) group by Materialrollen.[Mat-Nr], [Material-Stamm].Bezeichnung Aufgebraucht |
AW: ADOQuery berechnetes Feld
Hallo Delphi.Narium,
:shock: Hut ab von meiner Seite. Ich werde versuchen diese Anweisung zu übertragen und auszuprobieren. Wenn mein Kopf dann etwas freier ist, dann werde ich versuchen diese Anweisung auch zu verstehen. Dieses sprengt meine Grenzen. Vielen Dank für die Mühe. Gruß, Luckner |
AW: ADOQuery berechnetes Feld
Eventuell geht auch dashier, ist kürzer und dürfte resourcen- / laufzeitschonender sein:
SQL-Code:
SELECT
MaterialNr, sum((Arbeitsbreite / 1000) * lfm) as BESTAND, Bezeichnung, Aufgebraucht from ( SELECT Materialrollen.[Mat-Nr] As MaterialNr Materialrollen.[Arb-Breite] As Arbeitsbreite, Materialrollen.lfm, [Material-Stamm].Bezeichnung, case Materialrollen.DatumAb when null then 'nein' else 'ja' end as Aufgebraucht FROM Materialrollen LEFT JOIN [Material-Stamm] ON Materialrollen.[Mat-Nr] = [Material-Stamm].[Mat-Nr] WHERE ( ([Material-Stamm].[Lieferanten-Nr] = ' + Lieferantennr.Text + ') AND ([Material-Stamm].aktuell= -1) AND (Materialrollen.[Arb-Breite] > 179) ) ) group by MaterialNr, Bezeichnung, Aufgebraucht |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz