My [исправлено] решение использует один ALL подзапрос для проверки условия ItemStatusID:
DECLARE @MyPOID INT = 1;
DECLARE @IndentHeader TABLE
(
IndentID INT PRIMARY KEY
,StatusID INT NOT NULL
);
INSERT @IndentHeader
VALUES (1,5);
INSERT @IndentHeader
VALUES (2,5);
INSERT @IndentHeader
VALUES (3,5);
DECLARE @IndentDetail TABLE
(
IndentID INT NOT NULL
,ItemID INT NOT NULL
,ItemStatusID INT NOT NULL
,PRIMARY KEY(IndentID, ItemID)
);
INSERT @IndentDetail
VALUES (1,22,4);
INSERT @IndentDetail
VALUES (1,23,4);
INSERT @IndentDetail
VALUES (2,11,4);
INSERT @IndentDetail
VALUES (2,12,3);
INSERT @IndentDetail
VALUES (2,13,3);
INSERT @IndentDetail
VALUES (3,22,3);
DECLARE @POIndent TABLE
(
POID INT
,IndentID INT NOT NULL
,ItemID INT NOT NULL
,ItemStatusID INT NOT NULL
);
INSERT @POIndent
VALUES (1,1,22,4);
INSERT @POIndent
VALUES (1,1,23,4);
INSERT @POIndent
VALUES (1,2,11,4);
INSERT @POIndent
VALUES (2,3,22,4);
SELECT *
FROM @IndentHeader h;
SELECT *
FROM @IndentDetail d;
SELECT *
FROM @POIndent po;
UPDATE @IndentHeader
SET StatusID = CASE WHEN 4 = ALL(SELECT d.ItemStatusID FROM @IndentDetail d WHERE d.IndentID = h.IndentID) THEN 4 ELSE 3 END
FROM @IndentHeader h
WHERE h.IndentID IN (SELECT po.IndentID FROM @POIndent po WHERE po.POID = @MyPOID);
SELECT *
FROM @IndentHeader h;