SELECT F.ID AS Firm_ID -- Schválení dodavatelé
FROM Firms F
JOIN ApprovedSuppliers S ON S.Firm_ID = F.ID
WHERE
-- Hledám v nepředchůdcích
F.Firm_ID IS NULL AND
(:Sel_Firms = CAST('' AS VARCHAR(10)) OR F.ID IN (SELECT COALESCE(FS.Firm_ID, FS.ID) AS Firm_ID FROM SelDat SD JOIN Firms FS ON FS.ID = SD.Obj_ID WHERE SD.Sel_ID = :Sel_Firms)) AND
S.IsApproved = 'A' AND
S.ApprovingArea_ID IN (SELECT Obj_ID FROM SelDat WHERE Sel_ID = :Sel_ApprovingAreas)
GROUP BY F.ID
UNION
SELECT F.ID AS Firm_ID -- Schválení dodavatelé ze schválených předků
FROM Firms F
JOIN Firms F2 ON F2.Firm_ID = F.ID
JOIN ApprovedSuppliers S2 ON F2.ID = S2.Firm_ID
WHERE
-- Hledám v nepředchůdcích
F.Firm_ID IS NULL AND
(:Sel_Firms = CAST('' AS VARCHAR(10)) OR F.ID IN (SELECT COALESCE(FS.Firm_ID, FS.ID) AS Firm_ID FROM SelDat SD JOIN Firms FS ON FS.ID = SD.Obj_ID WHERE SD.Sel_ID = :Sel_Firms)) AND
NOT EXISTS (SELECT ID FROM ApprovedSuppliers S WHERE S.Firm_ID = F.ID AND S.ApprovingArea_ID = S2.ApprovingArea_ID) AND
S2.ApprovingArea_ID IN (SELECT Obj_ID FROM SelDat WHERE Sel_ID = :Sel_ApprovingAreas)
GROUP BY F.ID
HAVING
-- Musí být všichni předchůdci schváleni
SUM(CASE WHEN S2.IsApproved = 'A' THEN 1 ELSE 0 END) > 0 AND
SUM(CASE WHEN S2.IsApproved = 'N' THEN 1 ELSE 0 END) = 0 Generated by ABRA Software a.s. 27.10.2021 16:35:29