如何根据 AdhocID 是否为 NULL/NOT NULL 显示邮政编码

How to get a Postcode to show depending on if an AdhocID is NULL/NOT NULL

我目前正在尝试 return 送货地址的邮政编码。我目前遇到的问题是其中一些是 Ad hoc 地址,因此不会引用公司标准 SiteID。每条记录都有一个 CompanySiteID,这是我在 Ordering TableAddress Table 之间唯一可以 JOIN ON 的点。

我想要数据做什么或者如果它可以在 from 子句中完成是说如果 DeliveryCompanySiteID 是空白然后 return AdHocDeliveryAddressID 的邮政编码如果找不到站点的 AddressID,然后找到 AddressID

的邮政编码

下面是表格的示例以及我目前得到的内容:

Table 1 - 订单

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

Table 2 - 地址

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

Table 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 是空白然后 return [=24= 的邮政编码] 如果找不到站点的 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

最后我希望能够到达基于我上面显示的示例结果应该return的位置:

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

我希望我已经解释得够清楚了,因为我现在正在努力向自己解释。

我在 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