将2个字段组合成1个字段

时间:2014-09-23 20:26:44

标签: sql sql-server

为了解释我尝试做什么,我会做出一个假设的情况。 (忽略糟糕的数据库设计大声笑)

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    

我该怎么做?

1 个答案:

答案 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;