我有来自客户购物车的ORDERS表。这是典型的客户姓名、地址等字段列表。不同之处在于,当客户输入与账单信息不同的运输信息时,购物车会将运输信息填充到适当的字段(shipName、shipAddress、ShipState 等)中。但是,当客户自己发货时,购物车不会将发货信息移动到合适的发货字段(即shipName、shipAddress、shipState)。它将这些信息保存在 ordName、ordAddress、ordCity 等字段中,然后将运输相关字段保持为空。
因此,对于客户自己发货的订单,这些发货字段为空。当没有提供运输信息时,我使用 IF 命令将 ordName、ordAddr 等移动到别名,以便处理所有订单类型的运输信息(无论是客户发货到自己还是其他地址)。这部分在我下面的查询中运行良好。
一个问题仍然存在。我的运输计划不能使用长州名(例如,密歇根州、纽约州等)。它需要状态是两个字符的缩写(例如,MI,NY)。我有一个名为 * STATES的查找表,它具有长状态名称和两个字符缩写之间的映射。我正在尝试使用 ShipState 别名来查找给定状态的正确两个字符名称。我尝试将其作为 JOIN 执行,但不断出现错误。我删除了我正在使用的连接,只显示了现在可以正常工作的代码,但没有为状态缩写进行映射。有人可以帮忙吗?
SELECT
orders.ordDate AS `Date`,
orders.ordID AS Order_ID,
orders.ordEmail AS Email,
IF(ordShipName = ' ', ordName, ordShipName) AS Name,
IF(ordShipAddress = ' ', ordAddress, ordShipAddress) AS Address_1,
IF(ordShipAddress2 = ' ', ordAddress2, ordShipAddress2) AS Address_2,
IF(ordShipCity = ' ', ordCity, ordShipCity) AS City,
IF(ordShipState = ' ', ordState, ordShipState) AS ShipState,
IF(ordShipZip = ' ', ordZip, ordShipZip) AS Postal,
IF(ordShipCountry = ' ', ordCountry, ordShipCountry) AS Country,
IF(ordShipPhone = ' ', ordPhone, ordShipPhone) AS Phone,
FROM
orders
WHERE
orders.ordID > 21700
HAVING
Country = 'United States of America'