SQL Server - строка для возврата данных, даже если она не удовлетворяет WHERE, но имеет общие данные со строкой, которая выполняет
Я пытаюсь запустить скрипт, который будет возвращать результат в строку, даже если эта строка не удовлетворяет потребностям WHERE, но вместо этого имеет некоторые общие данные со строкой, которая ее удовлетворяет. (Извините, я знаю, что это на самом деле не объясняет, лучше в форме изображения).
Это часть результатов, которые я сейчас получаю с помощью приведенного ниже сценария. То, что мне нужно, это когда InvoiceID имеет InvDetProduct_Id 79,01 против него, тогда в столбце Compliancepack будет опубликован InvoiceID для всех строк этого идентификатора. Если у него нет InvDetProduct_Id против него, он вернет 0. Поэтому, следуя приведенному выше скриншоту, столбец Compliancepack для строк 1-3 будет все читать 1305255, тогда как строки 4-5 будут читать 0.
Как бы я поступил так? Большое спасибо за любые советы заранее:)
SELECT
ID.InvoiceID
,ID.InvDetProduct_Id
,MarkforCompliance.theresults AS 'Compliancepack'
,AF.secondaryRef
,CASE WHEN ID.InvDetProduct_Id = 27.1 THEN 'AML' ELSE ID.ProductName END AS 'Product Name'
,ISNULL((FORMAT(ID.ProductOrderedDate,'dd/MM/yyyy')),'0') AS PRODUCTOrderDate
,ISNULL((FORMAT(AF.OrderDate,'dd/MM/yyyy')),'0') AS CASEOrderDate
,AF.HouseNumber
,AF.HouseName
,AF.Street
,AF.Area
,AF.Town
,AF.PostCode
FROM InvoiceDetails AS ID
INNER JOIN AddressFile AS AF ON ID.InvoiceID = AF.InvoiceNumber
INNER JOIN ClientFile AS CF ON AF.ClientIDNo = CF.ClientID
OUTER APPLY(
SELECT
CASE
WHEN ID.InvDetProduct_Id = 79.01 THEN Id.InvoiceID
--WHEN ID.InvDetProduct_Id = 81.01 THE N 1
ELSE '0'
END AS theresults
) AS MarkforCompliance
WHERE ID.InvoiceStatus IN (0,1,2)
AND ID.InvDetProduct_Id NOT IN (77.05, 70.204,70.201,050)
AND ID.InvDetProduct_Id IN (27.1,79.01)
AND AF.OrderDate BETWEEN '2017-12-01' AND '2017-12-31'
AND CF.ClientID IN (12663, 10037)
ORDER BY id.InvoiceID ASC;