Исключить комбинацию элементов данных из одной таблицы из другой - PullRequest
0 голосов
/ 23 октября 2019

У меня есть представление A с 20 столбцами, которое формирует мои первичные данные. У меня есть таблица B, в которой перечислены некоторые из столбцов из A и содержатся данные, которые я хочу исключить из A.

Например, в таблице B будет 6 столбцов, 2 из которых 'customer' и 'country' и содержатданные «HP» и «Америка». Эти столбцы существуют в A. Но я хочу написать запрос, который возвращает данные из A, за исключением случаев, когда любые строки имеют комбинацию HP и America.

Существует 6 столбцов, и таблица B может иметь любую комбинацию строк,В любом месте может быть заполнено от 1 до 6 строк или может быть строка с 5 заполненными столбцами. Также есть другая строка с 5 заполненными столбцами и т. Д.

Я хочу быть готовым клюбая возможная комбинация из 6 строк и запрос для поиска комбинации A и исключения любых строк с этими данными из B.

Я пробовал это

SELECT *
FROM A T1
WHERE not  EXISTS
    (SELECT * FROM [dbo].[ExcludedItems] T2
    WHere ReportNumber=1
    AND
    (              
        T1.job=ISNULL(T2.job,T1.job) and T1.CustomerName=ISNULL(T2.CustomerName,T1.CustomerName) and
        T1.COUNTRY= ISNULL(T2.COUNTRY,T1.COUNTRY) and T1.CONTINENT=ISNULL(T2.CONTINENT,T1.CONTINENT) AND
        T1.continer= ISNULL(T2.ContainerName, T1.continer) and T1.UnscheduledJob= ISNULL(T2.unscheduledJob, T1.UnscheduledJob) and
        T1.[Price]= ISNULL(T2.Price, T1.Price) and
        T1.[Haulage]= ISNULL(T2.[Haulage], T1.[Haulage]) and
        T1.SiteAdress= ISNULL(T2.SiteAddress, T1.SiteAdress) and T1.Delta=ISNULL(T2.Delta, T1.Delta) and
        T1.Cost= ISNULL(T2.Cost, T1.Cost)
    )

)

Проблема заключается в результатенабор не правильный. Я пробовал использовать образец столбца меньшего размера и не смог выбрать правильную комбинацию «Клиент» и «Страна», но когда я ввел комбинацию 3-го или 4-го столбца, я могу просмотреть набор результатов и сразу увидеть его неверный. Не уверен, что мне придется использовать несколько NOT EXISTS для каждой возможной комбинации, надеялся не делать этого.

Ограничение A должно быть представлением, а не таблицей. В противном случае я бы использовал переменные каким-либо образом и обернул бы все это в хранимую процедуру.

Цените любую помощь, отступайте от необходимости вручную добавлять код, каждый раз, когда в B предоставляется комбинация элементов! *

...