Несколько других опций, которые вы можете попробовать:
DECLARE @PR TABLE
(
[prnum] INT
, [col2] NVARCHAR(100)
, [col3] INT
);
INSERT INTO @PR (
[prnum]
, [col2]
, [col3]
)
VALUES ( 1001, ' Khar ', 5 )
, ( 2002, ' SantaCruz ', 3 )
, ( 3200, ' Sion ', 2 )
, ( 4321, ' VT ', 1 );
DECLARE @PRLine TABLE
(
[prnum] INT
, [prlinenum] INT
, [status] NVARCHAR(100)
);
INSERT INTO @PRLine (
[prnum]
, [prlinenum]
, [status]
)
VALUES ( 1001, 1, 'INWILLCALL' )
, ( 1001, 2, 'ORDERED' )
, ( 2002, 1, 'ORDERED' )
, ( 2002, 2, 'ORDERED' )
, ( 2002, 3, 'ORDERED' )
, ( 3200, 1, 'INWILLCALL' )
, ( 3200, 2, 'INWILLCALL' );
--Option 1
SELECT [a].[prnum]
FROM @PR [a]
INNER JOIN @PRLine [b]
ON [b].[prnum] = [a].[prnum]
GROUP BY [a].[prnum]
HAVING MIN([b].[status]) = MAX([b].[status])
AND MIN([b].[status]) = 'INWILLCALL';
--Option 2
SELECT DISTINCT [a].[prnum]
FROM @PR [a]
INNER JOIN @PRLine [b]
ON [b].[prnum] = [a].[prnum]
WHERE [b].[status] = 'INWILLCALL'
AND [a].[prnum] NOT IN (
SELECT [prnum]
FROM @PRLine
WHERE [status] <> 'INWILLCALL'
);