I'm not sure i understand you well, but it seems you want to
cross join[
^] data, which mean you want to get all combination of
MachineName
and
ComplianceCheckItem
. Check below example:
DECLARE @master TABLE (MachineName VARCHAR(50), ComplianceCheckItem VARCHAR(50), [Status] VARCHAR(50))
INSERT INTO @master (MachineName, ComplianceCheckItem, [Status])
VALUES('M1', 'C1', 'Pass'),
('M1', 'C2', 'Pass'),
('M1', 'C3', 'Fail'),
('M1', 'C4', 'Pass'),
('M2', 'C3', 'Pass'),
('M2', 'C4', 'Pass'),
('M3', 'C1', 'Pass'),
('M3', 'C3', 'Fail'),
('M3', 'C5', 'Pass')
DECLARE @cci TABLE (ComplianceCheckItem VARCHAR(50))
INSERT INTO @cci(ComplianceCheckItem)
VALUES('C1'), ('C2'), ('C3'), ('C4'), ('C5')
SELECT t.MachineName, t.ComplianceCheckItem, COALESCE(ma.[Status] , 'NA') AS [Status]
FROM (
SELECT DISTINCT m.MachineName, c.ComplianceCheckItem
FROM @master AS m , @cci AS c
) AS t LEFT JOIN @master AS ma ON t.MachineName = ma.MachineName AND t.ComplianceCheckItem = ma.ComplianceCheckItem
Result (as expected):
MachineName ComplianceCheckItem Status
M1 C1 Pass
M1 C2 Pass
M1 C3 Fail
M1 C4 Pass
M1 C5 NA
M2 C1 NA
M2 C2 NA
M2 C3 Pass
M2 C4 Pass
M2 C5 NA
M3 C1 Pass
M3 C2 NA
M3 C3 Fail
M3 C4 NA
M3 C5 Pass
For further details, please see:
Visual Representation of SQL Joins[
^]
Using Cross Joins[
^]
COALESCE (Transact-SQL)[
^]