Как я могу присоединиться к записям клиентов в SQL Server, чтобы показать отсутствующие типы транзакций - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть две простые таблицы, состоящие из CustomerNumber, TransactionNumber и AddonCode в каждой.

Первая таблица содержит только TransactionNumber из 1 [Orig_DD].Это означает, что мы переносим клиента из одной системы в другую.

Вторая таблица содержит все номера транзакций на номер клиента, которые больше 1 [Later_Lines_DD].Они представляют собой надстройки, приобретенные после переноса их записи в новую систему.

Мне нужно показать записи клиентов, где;

Код (ы) надстроек, которые присутствовали в TransactionNumber 1не показывать против последующих TransactionNumbers в записи клиента.

В настоящее время они у меня СЛЕДУЮЩИЕ соединены вместе, и я столкнулся со стеной;

SELECT  cd1.CustomerNumber,
    cd1.TransactionNumber,
    cd1.AddonCode,
    cdg1.CustomerNumber,
    cdg1.TransactionNumber,
    cdg1.AddonCode
FROM Orig_DD cd1 LEFT JOIN LaterLines_DD cdg1  ON cd1.CustomerNumber = cdg1.CustomerNumber
                                                        AND cd1.AddonCode = cdg1.AddonCode 
ORDER BY cd1.CustomerNumber, cdg1.AddonCode

Примеры проблем, вызванныхприсоединение к CustomerNumber & AddonCode, которое я не могу выяснить;

1: если дополнительные коды клиента указаны в более поздних номерах транзакций И ​​1-й транзакции, их необходимо исключить (заголовки столбцов сокращены, чтобы соответствовать)

CustNo  TransNo AddonCode   CustNo  TransNo AddonCode
2490    1       Z1          2490    2       Z1
2490    1       Z2          2490    2       Z2
Если клиентские надстройки из TransactionNumber 1 не появляются в более поздних транзакциях, условия объединения не выполняются, и значения NULL отображаются справа.Это главная проблема - мне нужно вернуть все номера транзакций справа, когда надстройки клиента из TransactionNumber 1 больше не появляются;

CustNo TransNo AddonCode CustNo TransNo AddonCode

2497    1         Z1            NULL    NULL      NULL
2497    1         Z2            NULL    NULL      NULL

Вместо вышесказанного мне нужно увидеть следующее:

CustNo    TransNo    AddonCode    CustNo    TransNo    AddonCode
2497      1          Z1           2497      2          ZE
2497      1          Z2           2497      2          ZQ

Если я удалю AddonCode из объединения, CustomerNumber сам по себе создает каждое проникновение CustomerNumber, TransactionNumber и AddonCode, оставляя меня безпробелы, указывающие, где аддон-код не переносится на больший номер транзакции.

Не могу представить, как соединить две таблицы вместе, чтобы исключить пример 1 и сохранить данные, но по мере необходимостисм. это во второй части примера 2.

Ответы [ 2 ]

1 голос
/ 27 апреля 2019

Вы можете справиться с этим, используя функции Inner Join, Corelated Subquery и NOT IN.

SELECT  cd1.CustomerNumber,
    cd1.TransactionNumber,
    cd1.AddonCode,
    cdg1.CustomerNumber,
    cdg1.TransactionNumber,
    cdg1.AddonCode
FROM       Orig_DD cd1 
inner JOIN LaterLines_DD cdg1  ON cd1.CustomerNumber = cdg1.CustomerNumber
where cd1.AddonCode  not in 
( select  AddonCode
  from    LaterLines_DD Ldd
  where   Ldd.CustomerNumber = cdg1.CustomerNumber  
  AND     Ldd.AddonCode = cd1.AddonCode  
)
ORDER BY cd1.CustomerNumber, cdg1.AddonCode

В запросе «Выше», используя Corelated subquery, вы можете найти записи с одинаковыми AddonCode в обеих таблицах для каждого клиента. Затем вы можете исключить это, используя функцию not in.

where cd1.AddonCode  not in 
( select  AddonCode
  from    LaterLines_DD Ldd
  where   Ldd.CustomerNumber = cdg1.CustomerNumber  
  AND     Ldd.AddonCode = cd1.AddonCode  
)

Используйте Inner join и присоединяйтесь к ним только на CustomerNumber, вы получите запись, имеющую разные Addon для каждого клиента.

inner JOIN LaterLines_DD cdg1  ON cd1.CustomerNumber = cdg1.CustomerNumber

Надеюсь, это поможет !!

0 голосов
/ 27 апреля 2019

Пожалуйста, попробуйте это.

SELECT  cd1.CustomerNumber,
    cd1.TransactionNumber,
    cd1.AddonCode,
    cdg1.CustomerNumber,
    cdg1.TransactionNumber,
    cdg1.AddonCode
FROM Orig_DD cd1 INNER JOIN LaterLines_DD cdg1  ON cd1.CustomerNumber = cdg1.CustomerNumber AND cd1.TransactionNumber = (cdg1.TransactionNumber +1)
ORDER BY cd1.CustomerNumber, cdg1.AddonCode;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...