在这段代码中我有2次选择我使用的次数更多,有可能写入变量或其他方式来执行这个吗?
Select CASE WHEN (SELECT Sum(Menge-Geliefert) AS tReserviert FROM PendenzenZeilen INNER JOIN Pendenzen ON PendenzenZeilen.Buchungs_ID = Pendenzen.Buchungs_ID
WHERE Artikel_ID = Artikel.Artikel_ID AND Variante = ArtikelLager.Variante AND Pendenzen.Lagerort = 0 AND Pendenzen.Status > 1 and Pendenzen.Buchungstyp = 1) is null
THEN 0
ELSE (SELECT Sum(Menge-Geliefert) AS tReserviert FROM PendenzenZeilen INNER JOIN Pendenzen ON PendenzenZeilen.Buchungs_ID = Pendenzen.Buchungs_ID
WHERE Artikel_ID = Artikel.Artikel_ID AND Variante = ArtikelLager.Variante and Pendenzen.Lagerort = 0 AND Pendenzen.Status > 1 and Pendenzen.Buchungstyp = 1) END AS eReserviert,
CASE WHEN (SELECT Sum(Menge-Geliefert) AS tBestellt FROM PendenzenZeilen INNER JOIN Pendenzen ON PendenzenZeilen.Buchungs_ID = Pendenzen.Buchungs_ID
WHERE Artikel_ID = Artikel.Artikel_ID AND Variante = ArtikelLager.Variante AND Pendenzen.Lagerort = 0 AND Pendenzen.Buchungstyp = 2) is null
THEN 0
ELSE (SELECT Sum(Menge-Geliefert) AS tBestellt FROM PendenzenZeilen INNER JOIN Pendenzen ON PendenzenZeilen.Buchungs_ID = Pendenzen.Buchungs_ID
WHERE Artikel_ID = Artikel.Artikel_ID AND Variante = ArtikelLager.Variante AND Pendenzen.Lagerort = 0 AND Pendenzen.Buchungstyp = 2) END AS eBestellt,
(ArtikelLager.Lagerstand
-
CASE WHEN (SELECT Sum(Menge-Geliefert) AS tReserviert FROM PendenzenZeilen INNER JOIN Pendenzen ON PendenzenZeilen.Buchungs_ID = Pendenzen.Buchungs_ID
WHERE Artikel_ID = Artikel.Artikel_ID AND Variante = ArtikelLager.Variante AND Pendenzen.Lagerort = 0 AND Pendenzen.Status > 1 and Pendenzen.Buchungstyp = 1) is null
THEN 0
ELSE (SELECT Sum(Menge-Geliefert) AS tReserviert FROM PendenzenZeilen INNER JOIN Pendenzen ON PendenzenZeilen.Buchungs_ID = Pendenzen.Buchungs_ID
WHERE Artikel_ID = Artikel.Artikel_ID AND Variante = ArtikelLager.Variante AND Pendenzen.Lagerort = 0 AND Pendenzen.Status > 1 and Pendenzen.Buchungstyp = 1) END
+
CASE WHEN (SELECT Sum(Menge-Geliefert) AS tBestellt FROM PendenzenZeilen INNER JOIN Pendenzen ON PendenzenZeilen.Buchungs_ID = Pendenzen.Buchungs_ID
WHERE Artikel_ID = Artikel.Artikel_ID AND Variante = ArtikelLager.Variante AND Pendenzen.Lagerort = 0 AND Pendenzen.Buchungstyp = 2) is null
THEN 0
ELSE (SELECT Sum(Menge-Geliefert) AS tBestellt FROM PendenzenZeilen INNER JOIN Pendenzen ON PendenzenZeilen.Buchungs_ID = Pendenzen.Buchungs_ID
WHERE Artikel_ID = Artikel.Artikel_ID AND Variante = ArtikelLager.Variante AND Pendenzen.Lagerort = 0 AND Pendenzen.Buchungstyp = 2) END) AS eZumVerkauf
from ((Artikel
inner join ArtikelLager on Artikel.Artikel_ID = ArtikelLager.Artikel_ID)
inner join ArtikelLieferanten on Artikel.Artikel_ID = ArtikelLieferanten.Artikel_ID)
where ArtikelLager.Lager_ID = 0 and Artikel_Status = 0
order by Bezeichnung, Variante
我还需要在哪里使用eZumVerkauf,谢谢!!
答案 0 :(得分:0)
我认为您需要在具有最严格条件的内部select
中进行联接,然后使用结果。对于内部select
,请尝试以下内容:
SELECT
z.Buchungs_ID, a.Artikel_ID, a.Variante
Menge-Geliefert as tReserviert, Lagerstand, p.Status, p.Buchungstyp
FROM
PendenzenZeilen z INNER JOIN
Pendenzen p ON
z.Buchungs_ID = p.Buchungs_ID INNER JOIN
Artikel a on
p?.Artikel_ID = a.Artikel_ID INNER JOIN
Variante v on
a.Variante = v.Variante -- inner join ArtikelLieferant al on ??
WHERE
p.Lagerort = 0 AND
((Status > 1 and p.Buchungstyp = 1) or p.Buchungstyp =2))
然后你可以在外部选择中应用你的case
条件(不确定我是否因为某些条件缺失而需要它):
Select
CASE WHEN tReserviert is null THEN 0
when Buchungstyp = 1 then Sum(tReserviert) END AS eReserviert,
CASE WHEN tReserviert is null THEN 0
when Buchungstyp = 2 then Sum(tReserviert) END AS eBestellt,
(Lagerstand
-
CASE WHEN tReserviert is null THEN 0
when Buchungstyp = 1 then Sum(tReserviert) END
+
CASE WHEN tReserviert is null THEN 0
when Buchungstyp = 2 then Sum(tReserviert ) end AS eZumVerkauf
from (inner SELECT) s