如何根据 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 Table
和 Address 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
我目前正在尝试 return 送货地址的邮政编码。我目前遇到的问题是其中一些是 Ad hoc 地址,因此不会引用公司标准 SiteID
。每条记录都有一个 CompanySiteID
,这是我在 Ordering Table
和 Address 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