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,
'nein' as 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,
'ja' as 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 'ja' else 'nein' as 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,
'nein' as 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 'ja' else 'nein' as 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,
'nein' as 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 'ja' else 'nein' as 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