我今天遇到了这个障碍.也许是由于缺乏睡眠/咖啡,我只是无法弄清楚如何到处走走.
我们需要一个查询地址表的查询,并为同一客户返回一行的交付地址和帐单地址.
表格结构当然大大简化,只包括相关的列.
地址表:
CustID Address AddressType
-----------------------------------
1 3 Marsh Road D
1 5 Bog Street B
2 4 Peat Close D
3 1 Swamp Crescent D
3 5 Moor Avenue B
4 6 Wetland Place D
Run Code Online (Sandbox Code Playgroud)
主键是(custID,AddressType).AddressType值:D =传递地址; B =帐单邮寄地址.每个CustID都有一个Delivery Adress,但不是每个人都有一个Billing地址.
现在我想要实现的是基于AddressType字段,通过查询将上面的内容转换为下面的内容,这样我们就可以了(如果没有Billing,那么使用Delivery地址):
CustID DelAddress BillAddress
---------------------------------------
1 3 Marsh Road 5 Bog Street
2 4 Peat Close 4 Peat Close
3 1 Swamp Crescent 5 Moor Avenue
4 6 Wetland Place 6 Wetland Place
Run Code Online (Sandbox Code Playgroud)
当A和B中存在某些内容时,LEFT OUTER JOIN将帮助您.加入地址表两次,一次用于交付,一次用于可选结算.使用COALESCE将null值替换为其他值
SELECT
CustID
, D.Address AS DelAddress
, COALESCE(B.Address, D.Address) AS BillAddress
FROM
ADDRESS D
LEFT OUTER JOIN
ADDRESS B
ON B.CustId = D.CustId
AND B.AddressType = 'B'
WHERE
D.AddressType = 'D'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |