Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将2个字段合并为1个字段_Sql_Sql Server - Fatal编程技术网

Sql 将2个字段合并为1个字段

Sql 将2个字段合并为1个字段,sql,sql-server,Sql,Sql Server,为了解释我要做的事,我会假设一个情况。(忽略坏的数据库设计lol) 3个表: Customers: CustomerID (pk), CustomerName AM_Orders: OrderID (pk), OrderDateTime, TotalAmt, CustomerID (fk), OrderType PM_Orders: OrderID (pk), OrderDateTime, TotalAmt, CustomerID (fk) OrderType 我希望生成一个查询,显示所有加入

为了解释我要做的事,我会假设一个情况。(忽略坏的数据库设计lol)

3个表:

Customers: CustomerID (pk), CustomerName
AM_Orders: OrderID (pk), OrderDateTime, TotalAmt, CustomerID (fk), OrderType
PM_Orders: OrderID (pk), OrderDateTime, TotalAmt, CustomerID (fk) OrderType
我希望生成一个查询,显示所有加入AM_订单和PM_订单的客户,但我只希望有一个TotalAmt字段,而不是两个

因此,结果可能是

 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    

我该怎么做

这有点含糊不清,但听起来像是要将所有结果联合起来:

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;

您可以左键联接到一个派生表,该派生表是两个Orders表的并集。