AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ADOQuery berechnetes Feld

Ein Thema von Luckner · begonnen am 3. Jun 2019 · letzter Beitrag vom 11. Jun 2019
Antwort Antwort
Delphi.Narium

Registriert seit: 27. Nov 2017
2.559 Beiträge
 
Delphi 7 Professional
 
#1

AW: ADOQuery berechnetes Feld

  Alt 6. Jun 2019, 10:45
Ist jetzt nur geraten.

Sinngemäß in etwa sowas?
SQL-Code:
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,
    'neinas 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,
    'jaas 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
Die aufgebrauchten Materialien sollten nun in der Spalte "Aufgebraucht" einen entsprechenden Hinweise, bestehend aus den Wörten 'ja' bzw. 'nein', stehen haben.

Geändert von Delphi.Narium ( 6. Jun 2019 um 15:30 Uhr) Grund: von TE gefundenen Fehler behoben.
  Mit Zitat antworten Zitat
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: ADOQuery berechnetes Feld

  Alt 6. Jun 2019, 11:01
Hallo Delphi.Narium,

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
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.559 Beiträge
 
Delphi 7 Professional
 
#3

AW: ADOQuery berechnetes Feld

  Alt 6. Jun 2019, 11:13
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 'neinelse 'jaend 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

Geändert von Delphi.Narium ( 6. Jun 2019 um 15:42 Uhr) Grund: Fehler (hoffentlich) behoben, war ja auch zu dämlich :-(
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: ADOQuery berechnetes Feld

  Alt 6. Jun 2019, 12:48
Eventuell geht auch dashier, ist kürzer und dürfte resourcen- / laufzeitschonender sein: ..
Ja, also ein Union aus MengeMitIsNotNull und MengeMitIsNull wäre wahrscheinliche einfach: Menge.
Ich fürchte ja wie oben geschrieben, dass outer verkehrt rum läuft. Dazu könnte Luckner einfach mal eine SQL Stichprobe ohne das ganze Drumrum machen.
Gruß, Jo
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.559 Beiträge
 
Delphi 7 Professional
 
#5

AW: ADOQuery berechnetes Feld

  Alt 6. Jun 2019, 13:01
Nö, nicht ganz.

Laut der letzten Frage
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.
fehlen ja die Sachen, bei denen Materialrollen.DatumAb <> NULL (lieber Materialrollen.DatumAb is not NULL) ist.

Da in der ursprünglichen Abfrage aber auf Materialrollen.DatumAb IS NULL abgefragt wurde, kann die vermisste Menge ja garnicht im Ergebnis sein.

Meine Idee war halt zuerst: Nehmen wird die Abfrage mit dem bisherigen, gewünschten und inzwischen korrekten Teilergebnis und fügen noch mal das "Gegenstück" für den fehlenden Rest hinzu.

Geht am Einfachsten erstmal mit Union All.

Soweit, so naiv.

Die Einschränkung, die für den "Datenverlust" verantworlich zeichnet, einfach rauszunehmen, war dann ein Gedanke, der erst "Minuten später" (der Groschen fällt halt pfennigweise) kam.

Lassen wir dem TE jetzt erstmal ein bisserl Zeit zum verdauen. Danach wird er uns (hoffentlich) über den Erfolg / Misserfolg unterrichten
  Mit Zitat antworten Zitat
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: ADOQuery berechnetes Feld

  Alt 6. Jun 2019, 15:27
Hallo Delphi.Narium,
habe beide Versionen ausprobiert. Die 2. Select-Anweisung liefert ersmal einen unbekannten Fehler. Werde versuchen ihn, mit meinen Kenntnissen, zu korrigieren.
Die 1.-te, längere Anweisung liefert folgendes:

Material-Nr: / Bezeichnung / Bestand / aufgebraucht
265627 / schreib-weiß, permanent / 1300465,5 / ja
265627 / schreib-weiß, permanent / 5148 / nein


usw. für alle anderen Materialrollen.

Es sollten nur die Datensätze bleiben die ein "nein" enthalten und nur die, die ein "ja" enthalten, dann aber der Bestand = 0.

UNION ALL
SELECT
Materialrollen.[Mat-Nr], !!!! habe ich korrigiert.
Materialrollen.[Mat-Nr],

Gruß, Luckner
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.559 Beiträge
 
Delphi 7 Professional
 
#7

AW: ADOQuery berechnetes Feld

  Alt 6. Jun 2019, 15:49
Das 2. SQL hab' ich oben überarbeitet.

Zitat:
Es sollten nur die Datensätze bleiben die ein "nein" enthalten und nur die, die ein "ja" enthalten, dann aber der Bestand = 0.
SQL-Code:
select * from (
  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,
      'neinas 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,
      'jaas 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
    MaterialNr,
    Bezeichnung,
    Aufgebraucht
)
where (Aufgebraucht = 'nein')
or (Aufgebraucht = 'jaand Bestand = 0)
Und ja, das muss auch ohne dieses blöde Union all gehen.

Deshalb noch ein Versuch:
SQL-Code:
select * from (
  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 'neinelse 'jaend 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
)
where (Aufgebraucht = 'nein')
or (Aufgebraucht = 'jaand Bestand = 0)
Wenn das jetzt funktioniert, wird's ja schon fast wieder übersichtlich
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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