为了解释我尝试做什么,我会做出一个假设的情况。 (忽略糟糕的数据库设计大声笑)
3张表:
Customers: CustomerID (pk), CustomerName
AM_Orders: OrderID (pk), OrderDateTime, TotalAmt, CustomerID (fk), OrderType
PM_Orders: OrderID (pk), OrderDateTime, TotalAmt, CustomerID (fk) OrderType
我想生成一个查询,显示所有客户LEFT加入AM_Orders和PM_Orders,但我只希望 ONE TotalAmt字段,而不是2。
所以,结果可能是......
ID CName TotalAmt OrderType
1 Bob $100 "AM"
1 Bob $10 "AM"
3 Steve $20 "PM"
4 Tom $20.45 "AM"
5 Andy $21 "PM"
6 Jimmy
我该怎么做?
答案 0 :(得分:1)
这有点含糊不清,但听起来你想要union all
这两个结果:
select
c.CustomerID ID,
c.CustomerName Cname,
o.TotalAmt,
o.OrderType
from
Customers c
left join
AM_Orders o
on c.CustomerID = o.CustomerID
union all
select
c.CustomerID ID,
c.CustomerName Cname,
o.TotalAmt,
o.OrderType
from
Customers c
left join
PM_Orders o
on c.CustomerID = o.CustomerID
order by
ID;
或作为Tab建议,先联合然后加入。对于一个表中有条目而另一个表中没有条目的情况,这可能会更好:
;with all_orders as (
select
o.CustomerID,
o.TotalAmt,
o.OrderType
from
AM_Orders o
union all
select
o.CustomerID,
o.TotalAmt,
o.OrderType
from
PM_Orders o
) select
c.CustomerID ID,
c.CustomerName Cname,
a.TotalAmt,
a.OrderType
from
Customers c
left join
all_orders a
on c.CustomerID = a.CustomerID
order by
ID;