我今天遇到了这个障碍.也许是由于缺乏睡眠/咖啡,我只是无法弄清楚如何到处走走.
我们需要一个查询地址表的查询,并为同一客户返回一行的交付地址和帐单地址.
表格结构当然大大简化,只包括相关的列.
地址表:
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
主键是(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
当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'
| 归档时间: | 
 | 
| 查看次数: | 168 次 | 
| 最近记录: |