简体   繁体   中英

Merge 2 tables into 1 SQL Server

This is my current table:

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

OrderID is the primary key

I have a temporary table Temp1 :

Order_CreateDate   Order_ReturnDate
     20051102           20051104
     20051103           20051108
     20051104           20051105

I want to change the dates YYYYMMDD in Temp1 table , to YYYY-MM-DD , and move it to table, this code below does not work if I insert straight into Sales Table as it displays error saying:

Cannot insert the value NULL into column 'Order_ID', table 'car_rental.dbo.DataInCentralDatabase2'; column does not allow nulls. INSERT fails

However if I test it out by outputting to another temporary table, temp2 , it works.

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

But running this code two times for temp2 table (for the two converted columns) has the following result:

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

I know this question is extremely confusing, but as the end result I want it to become like this:

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

Any ideas on how to tackle this?

You need another column in Temp1 table as

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

Use Update query and not Insert query

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  

At the first, you should get an updated version of temp1 like this:

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

then, update your main table with join on temp1, like this:

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 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM