Как получить почтовый индекс для отображения в зависимости от того, является ли AdhocID NULL / NOT NULL - PullRequest
0 голосов
/ 07 мая 2019

В настоящее время я пытаюсь вернуть почтовые индексы для адресов доставки.Проблема, с которой я сталкиваюсь в настоящее время, заключается в том, что некоторые из них являются адресами Ad hoc, поэтому они не относятся к стандарту компаний SiteID.Каждая запись имеет CompanySiteID, и это единственная точка, которую я могу JOIN ON между Ordering Table и Address Table.

Что я хочу, чтобы данные делали или если это можно сделать виз условия сказать, что если DeliveryCompanySiteID пусто, вернуть почтовый индекс для AdHocDeliveryAddressID, если не найти AddressID для сайта, а затем найти почтовый индекс для этого AddressID

Ниже приведенобразец таблиц и что я в настоящее время получаю:

Таблица 1 - порядок

CompanySiteID   DeliveryCompanySiteID   InvoiceCompanySiteID AdHocDeliveryAddressID
 8613552                                      8613552            663401931
94823142            326963198                326963198  
633057107           634312178                565578092

Таблица 2 - Адрес

AddressID   AddPostCode
663401931    NG1 1PQ
123          S12 1TP
456          S1 9PU
789          S11 1TY

Таблица 3 - сайт компании

CompanySiteID   AddressID
8613552       123
94823142      456
633057107     789

Исходя из кода, который я использую ниже, это результат, который я получаю:

Site ID Site        PostCode
8613552             S12 1TP
94823142            S1 9PU
633057107           S11 1TY

Причина, по которой я считаю, что это происходит, заключается в том, что мой JOIN:

Причина, по которой я получаю текущий результат, заключается в том, что мое соединение запрашивает: JOIN SBS.PUB.Address Address_0 ON CompanySite_0.AddressID = Address_0.AddressID

К сожалению, нет другого способа присоединиться к таблицам, так что я чувствую, что мне нужно что-то на месте, которое фактически говорит, что если DeliveryCompanySiteID пусто, то возвращает почтовый индекс для AdHocDeliveryAddressID если не найти AddressID для сайта, а затем найти почтовый индекс для этого AddressID

Пожалуйста, см. Упрощенную версию моего кода:

SELECT 
 CompanySite_0.CompanySiteID
    , Address_0.AddPostCode AS 'Delivery Post Code'


 FROM 

   SBS.PUB.SopOrderItem SopOrderItem_0 
    JOIN SBS.PUB.CompanySite CompanySite_0 ON SopOrderItem_0.CompanySiteID = CompanySite_0.CompanySiteID
    JOIN SBS.PUB.Address Address_0 ON CompanySite_0.AddressID = Address_0.AddressID

ВВ конце я надеюсь, что смогу добраться до позиции, где на основе примера, который я показал выше, результат должен возвращаться как:

Site ID Site      PostCode
8613552           NG1 1PQ            
94823142          S1 9PU
633057107         S11 1TY

А не как:

Site ID Site     PostCode
8613552          S12 1TP 
94823142         S1 9PU
633057107        S11 1TY

Надеюсь, я объяснил это достаточно хорошо, так как сейчас пытаюсь объяснить это себе.

1 Ответ

2 голосов
/ 07 мая 2019

Я сделал это в SQL Developer, надеюсь, он будет работать с интерпретатором Openedge SQL (который использует SQL-92, последний раз я проверял).

SELECT
  orderitem.COMPANYSITEID
  , ADDRESS.ADDPOSTCODE as "Delivery Post Code"
  FROM 
    ORDERITEM
    LEFT JOIN COMPANYSITE ON (CASE WHEN ORDERITEM.DELIVERYCOMPANYSITEID IS NULL THEN 
                                        ORDERITEM.ADHOCDELIVERYADDRESSID ELSE 
                                        ORDERITEM.COMPANYSITEID END ) = COMPANYSITE.COMPANYSITEID 
    JOIN address ON (CASE WHEN companysite.addressID IS NULL THEN 
                               ORDERITEM.ADHOCDELIVERYADDRESSID ELSE 
                               companysite.addressID end ) = address.addressID;

Это дало мне результат

 94823142   S1 9PU
633057107   S11 1TY
  8613552   NG1 1PQ
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...