将2个表合并为1个SQL Server

时间:2014-04-09 06:09:09

标签: sql sql-server sql-server-2012

这是我目前的表格:

Sales Table
OrderID  Customer_ID  Customer_Name
 1         12            Bob
 2         18            Ben
 3         11            Harry

OrderID是主键

我有一张临时表Temp1

Order_CreateDate   Order_ReturnDate
     20051102           20051104
     20051103           20051108
     20051104           20051105

我想将YYYYMMDD中的日期Temp1 table更改为YYYY-MM-DD,并将其移至表格,如果我直接插入Sales Table,此代码无效因为它显示错误说:

  

无法将值NULL插入列'Order_ID',表'car_rental.dbo.DataInCentralDatabase2';列不允许空值。 INSERT失败

但是,如果我通过输出到另一个临时表temp2来测试它,它就会起作用。

INSERT INTO [dbo].[sales]([Order_CreateDate])
   SELECT
      CONVERT(date,Order_CreateDate,111) AS Order_CreateDate 
   FROM dbo.temp1

但是temp2 table(对于两个转换列)运行此代码两次具有以下结果:

Order_CreateDate   Order_ReturnDate
   2005-11-02          
   2005-11-03           
   2005-11-04          
    NULL             2005-11-04
    NULL             2005-11-08
    NULL             2005-11-05

我知道这个问题非常令人困惑,但最终结果我希望它变成这样:

OrderID  Customer_ID  Customer_Name    Order_CreateDate   Order_ReturnDate
 1         12            Bob              2005-11-02             2005-11-04
 2         18            Ben              2005-11-03             2005-11-08
 3         11            Harry            2005-11-04             2005-11-05

关于如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:2)

您需要Temp1表中的另一列

    OrderID  Order_CreateDate   Order_ReturnDate
       1            20051102           20051104
       2            20051103           20051108
       3            20051104           20051105

使用更新查询而非插入查询

UPDATE a set 
    Order_CreateDate=CONVERT(datetime,b.Order_CreateDate,111),
    Order_ReturnDate=CONVERT(datetime,b.Order_ReturnDate,111) 
from [dbo].[sales] a join [dbo].[Temp1] b on a.OrderID = b.OrderID  

答案 1 :(得分:1)

首先,您应该获得这样的temp1的更新版本:

 select 
      CONVERT(date,Order_CreateDate,111) as Order_CreateDate,
      CONVERT(date,Order_ReturnDate,111) as Order_ReturnDate,
      OrderID 
   into #temp2
 from temp1

然后,使用temp1上的join更新主表,如下所示:

update s
   s.Order_CreateDate = t.Order_CreateDate,
   s.Order_ReturnDate = t.Order_ReturnDate
from sales s
        inner join #temp2 t
          on s.OrderID = t.OrderID