Это моя тестовая таблица:
CREATE TABLE dbo.freefieldassignment (
Carrierobjectid NVARCHAR(255),
freefieldobjectid NVARCHAR(255),
value NVARCHAR(255),
objectid NVARCHAR(255)
)
INSERT INTO freefieldassignment (Carrierobjectid, freefieldobjectid, value, objectid)
VALUES
('1','2','N','2'),
('1','3','N','2'),
('1','3','N','3'),
('1','3','ESCORT','3')
И это мой запрос.Второй запрос будет генерировать строку, если не найдена строка ESCORT для значений, используемых в выражении group by:
SELECT Carrierobjectid, freefieldobjectid, value, objectid FROM freefieldassignment
WHERE Carrierobjectid = 1 AND objectid = 2
UNION ALL
SELECT Carrierobjectid, null, null, objectid
FROM freefieldassignment
WHERE Carrierobjectid = 1 AND objectid = 2
GROUP BY Carrierobjectid, objectid
HAVING MAX(CASE WHEN value = 'ESCORT' THEN 1 ELSE 0 END) = 0
Результат:
Carrierobjectid | freefieldobjectid | value | objectid
1 | 2 | N | 2
1 | 3 | N | 2
1 | NULL | NULL | 2
Когда существует строка ESCORT, второй запрос от union не 'y вернуть данные:
SELECT Carrierobjectid, freefieldobjectid, value, objectid FROM freefieldassignment
WHERE Carrierobjectid = 1 AND objectid = 3
UNION ALL
SELECT Carrierobjectid, null, null, objectid
FROM freefieldassignment
WHERE Carrierobjectid = 1 AND objectid = 3
GROUP BY Carrierobjectid, objectid
HAVING MAX(CASE WHEN value = 'ESCORT' THEN 1 ELSE 0 END) = 0
Результат
Carrierobjectid | freefieldobjectid | value | objectid
1 | 3 | N | 3
1 | 3 | ESCORT | 3