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;

0 ответов

Другие вопросы по тегам