Einzelnen Beitrag anzeigen

Delphi.Narium

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

AW: ADOQuery berechnetes Feld

  Alt 6. Jun 2019, 16: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