我的 SQL 查询确实需要很多时间,所以我认为可能有更好的编写方法。
表“Vorgangdetails”有一个项目,该项目在“RecId”中有一个数字。这个数字可能在“WeiterfuehrungVonPos”中的不同行。如果是这样,这个新行在“RecId”中有一个数字,它可能再次在“WeiterfuehrungVonPos”中的不同行中......(总共最多 3 次)我的查询太长了。知道更快的方法吗?
SELECT
SUM(VD_AB.Menge) AS Amount,
Artikel.Artikelnummer AS Artikelnummer,
FROM Artikel
INNER JOIN Vorgangdetails AS VD_AB
ON LEFT(VD_AB.Auftrag, 3) = 'AF-'
AND Artikel.Artikelnummer = VD_AB.Artikel
--> 从与 VD_AB 相同的表中添加最多 1 个结果
LEFT JOIN Vorgangdetails AS VD_L
ON LEFT(VD_L.Auftrag, 3) = 'LF-'
AND Artikel.Artikelnummer = VD_L.Artikel
AND VD_L.WeiterfuehrungVonPos = VD_AB.RecId
--> 再次...从与 VD_AB 相同的表中添加最多 1 个结果
LEFT JOIN Vorgangdetails AS VD_RvL
ON VD_L.RecID = VD_RvL.WeiterfuehrungVonPos
AND LEFT(VD_RvL.Auftrag, 3) = 'RE-'
--> 再次...从与 VD_AB 相同的表中添加最多 1 个结果
LEFT JOIN Vorgangdetails AS VD_RvAB
ON VD_AB.RecID = VD_RvAB.WeiterfuehrungVonPos
AND LEFT(VD_RvAB.Auftrag, 3) = 'RE-'
WHERE (VD_RvAB.Auftrag = '' AND VD_RvL.Auftrag = '')
GROUP BY(Artikelnummer)
. .
最终结果) -------------- 编辑以反映 Roman Pekar 的所有答案
SELECT
SUM(VD_AB.Menge) AS Auftragsmenge,
Artikel.Artikelnummer AS Artikelnummer,
FROM Artikel
INNER JOIN Vorgangdetails AS VD_AB
ON VD_AB.Auftrag LIKE 'AB-%'
AND Artikel.Artikelnummer = VD_AB.Artikel
LEFT JOIN Vorgangdetails AS VD_L
ON Artikel.Artikelnummer = VD_L.Artikel
AND VD_L.WeiterfuehrungVonPos = VD_AB.RecId
AND (VD_L.Auftrag LIKE 'LF-%' OR VD_L.Auftrag LIKE 'RE-%')
LEFT JOIN Vorgangdetails AS VD_RvL
ON VD_L.Auftrag is not null
AND VD_L.Auftrag LIKE 'LF-%'
AND VD_L.RecID = VD_RvL.WeiterfuehrungVonPos
AND VD_RvL.Auftrag LIKE 'RE-%'
WHERE (Artikel.Kategorie = 'KARSTADT->Aktive')
AND (VD_L.Auftrag LIKE 'LF-%' AND VD_RvL.Auftrag = '')
AND NOT (VD_L.Auftrag LIKE 'RE-%')
GROUP BY(Artikelnummer)