Einzelnen Beitrag anzeigen

Delphi.Narium

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

AW: ADOQuery berechnetes Feld

  Alt 7. Jun 2019, 21:06
Zitat:
die Aufgabenstellung ist folgende:
Ein Lieferant liefert "[Material-Stamm].[Lieferanten-Nr]" verschiedene Papiersorten.
select * from [Material-Stamm] where [Lieferanten-Nr] = :LieferantenNr
Zitat:
Das Material (Papiersorten) liegt bei uns als Rollen von verschiedenen Grössen und Breiten auf Lager.

Aufgabe:

Zeige die markierten Materialien "[Material-Stamm].aktuell = -1"
SQL-Code:
select * from [Material-Stamm]
where aktuell = -1
and [Lieferanten-Nr] = :LieferantenNr
Zitat:
des Lieferanten die eine Breite > 179mm haben,
SQL-Code:
select * from [Material-Stamm]
where aktuell = -1
and Lieferanten-Nr] = :LieferantenNr
and Breite > 179
Zitat:
die kein Abgangsdatum "Materialrollen.DatumAb"
SQL-Code:
select *
from [Material-Stamm] s
inner join Materialrollen r on s.[Lieferanten-Nr] = r.[Lieferanten-Nr]
where s.[Lieferanten-Nr] = :LieferantenNr
and s.aktuell = -1
and s.Breite > 179
and r.DatumAb is null
Zitat:
und berechne die Fläche des Materials.
SQL-Code:
select
  r.[Mat-Nr] As MaterialNr,
  r.[Arb-Breite] / 1000 * r.lfm as Bestand,
  s.Bezeichnung As Bezeichnung
from [Material-Stamm] s
inner join Materialrollen r on s.[Lieferanten-Nr] = r.[Lieferanten-Nr]
where s.[Lieferanten-Nr] = :LieferantenNr
and s.aktuell = -1
and s.Breite > 179
and r.DatumAb is null
Zitat:
Aufgebraucht = nein.
SQL-Code:
select
  r.[Mat-Nr] As MaterialNr,
  r.[Arb-Breite] / 1000 * r.lfm as Bestand,
  s.Bezeichnung As Bezeichnung,
  'neinas Aufgebraucht
from [Material-Stamm] s
inner join Materialrollen r on s.[Lieferanten-Nr] = r.[Lieferanten-Nr]
where s.[Lieferanten-Nr] = :LieferantenNr
and s.aktuell = -1
and s.Breite > 179
and r.DatumAb is null
Zitat:
Falls Materialrollen <= 179, dann braucht es keine Summe
(kann aber trotzdem berechnet und angezeigt werden)
aber der Hinweis "aufgebraucht = ja" angezeigt werden.
SQL-Code:
select
  r.[Mat-Nr] As MaterialNr,
  0 as Bestand,
  s.Bezeichnung As Bezeichnung,
  'jaas Aufgebraucht
from [Material-Stamm] s
inner join Materialrollen r on s.[Lieferanten-Nr] = r.[Lieferanten-Nr]
where s.[Lieferanten-Nr] = :LieferantenNr
and s.aktuell = -1
and s.Breite <= 179
and r.DatumAb is null
Zitat:
Falls keine Rollen vorhanden, dann Fläche = 0 und aufgebraucht = ja.
SQL-Code:
select
  r.[Mat-Nr] As MaterialNr,
  case
    when r.[Arb-Breite] is null
  then
    0
  else
    r.[Arb-Breite] / 1000 * r.lfm
  end as Bestand,
  s.Bezeichnung As Bezeichnung,
  case when r.[Arb-Breite] is null then 'jaelse 'neinas Aufgebraucht
from [Material-Stamm] s
left join Materialrollen r on s.[Lieferanten-Nr] = r.[Lieferanten-Nr]
where s.[Lieferanten-Nr] = :LieferantenNr
and s.aktuell = -1
and s.Breite <= 179
and r.DatumAb is null
Zitat:
Ich hoffe, ich konnte das Problem jetzt besser beschreiben als meine Select-Anweisungen.
Ehrlich gesagt: nicht wirklich, da ist irgendwas noch widersprüchlich (oder es ist zu spät)

Eventuell in die Richtung?
SQL-Code:
select
  r.[Mat-Nr] As MaterialNr,
  r.[Arb-Breite] / 1000 * r.lfm as Bestand,
  s.Bezeichnung As Bezeichnung,
  'neinas Aufgebraucht
from [Material-Stamm] s
inner join Materialrollen r on s.[Lieferanten-Nr] = r.[Lieferanten-Nr]
where s.[Lieferanten-Nr] = :LieferantenNr
and s.aktuell = -1
and s.Breite > 179
and r.DatumAb is null
union all
select
  r.[Mat-Nr] As MaterialNr,
  case
    when r.[Arb-Breite] is null
  then
    0
  else
    r.[Arb-Breite] / 1000 * r.lfm
  end as Bestand,
  s.Bezeichnung As Bezeichnung,
  case when r.[Arb-Breite] is null then 'jaelse 'neinas Aufgebraucht
from [Material-Stamm] s
left join Materialrollen r on s.[Lieferanten-Nr] = r.[Lieferanten-Nr]
where s.[Lieferanten-Nr] = :LieferantenNr
and s.aktuell = -1
and s.Breite <= 179
and r.DatumAb is null
Nun noch mit dem Versuch der Summierung:
SQL-Code:
select
  MaterialNr,
  Sum(Bestand) as Bestand,
  Bezeichnung,
  Aufgebraucht
from
(
  select
    r.[Mat-Nr] As MaterialNr,
    r.[Arb-Breite] / 1000 * r.lfm as Bestand,
    s.Bezeichnung As Bezeichnung,
    'neinas Aufgebraucht
  from [Material-Stamm] s
  inner join Materialrollen r on s.[Lieferanten-Nr] = r.[Lieferanten-Nr]
  where s.[Lieferanten-Nr] = :LieferantenNr
  and s.aktuell = -1
  and s.Breite > 179
  and r.DatumAb is null
  union all
  select
    r.[Mat-Nr] As MaterialNr,
    case
      when r.[Arb-Breite] is null
    then
      0
    else
      r.[Arb-Breite] / 1000 * r.lfm
    end as Bestand,
    s.Bezeichnung As Bezeichnung,
    case when r.[Arb-Breite] is null then 'jaelse 'neinas Aufgebraucht
  from [Material-Stamm] s
  left join Materialrollen r on s.[Lieferanten-Nr] = r.[Lieferanten-Nr]
  where s.[Lieferanten-Nr] = :LieferantenNr
  and s.aktuell = -1
  and s.Breite <= 179
  and r.DatumAb is null
)
group by
  MaterialNr,
  Bezeichnung,
  Aufgebraucht
Inzwischen hab' ich den Durchblick verloren, keine Ahnung wieviele Denk- und Syntaxfehler ich da eingebaut habe, aber vielleicht ist es ja nicht ganz hoffnungslos
  Mit Zitat antworten Zitat