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
 
Delphi.Narium

Registriert seit: 27. Nov 2017
2.589 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
 


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 19:44 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