将2个SQL Server表合并为一个表

本文关键字:一个 合并 2个 SQL Server | 更新日期: 2023-09-27 18:17:54

我有2个SQL Server表发票和生产。发票包含这些列(ID、ItemID、日期、AccountNo、数量、类型、价格、总额),生产表包含这些列(ItemID、日期、数量、类型)我想把这两个表合并成一个表,其中ItemID、Date和Quantity是通用的。像生产日期要在发票数据之后查看,以后我按日期排序。非通用字段可以有一个NULL值)与下面的示例相同…

怎么做?

ID      ItemID     Date          AccountNo      Quantity     Type         Price    Total
------------------------------------------------------------------------------------------
1       4          2013-06-10    123456         10           Invoice      5.00     50.00
2       7          2013-06-10    456789         15           Invoice      3.00     45.00
NULL    4          2013-06-05    NULL           40           Production   NULL     NULL

将2个SQL Server表合并为一个表

你想做一个full outer join:

select i.ID,
       coalesce(i.ItemID, p.ItemId) as ItemId,
       coalesce(i.Date, p.Date) as Date,
       i.AccountNo,
       coalesce(i.Quantity, p.Quantity) as Quantity,
       p.Type, i.Price 
from Invoice i full outer join
     Production p
     on i.ItemID = p.ItemId and
        i.Date = p.Date and
        i.Quantity = p.Quantity

当第二个表在第一个表中没有匹配时,coalesce()确保键列来自第二个表。