2012-07-17 81 views
0

我有一種情況,我必須合併兩個表而不丟失任何數據。這兩張桌子有不同的結構。以下是我的表sql server合併兩個不同結構的表

TABLE A 
ID_NO INT, 
Ship_Date DATE, 
Status varchar(10), 
total decimal(12,2) 

TABLE B 
ID_NO INT, 
Status varchar(10), 
total decimal(12,2) 

我試着使用UNION的結構全部由包括表B中的虛擬列如下

TABLE B 
ID_NO INT, 
'', 
Status varchar(10), 
total decimal(12,2) 

,但在結果集中,我得到爲1900-01-01 Ship_Date代替 ''。如何消除這一點?

回答

5

使用NULL值,而不是一個空字符串。如果您不介意Ship_Date結果爲字符串,則可以將UNION包裝在另一個select語句中。

SELECT U._ID_NO, 
     CASE WHEN U.Ship_Date IS NULL 
       THEN '' 
       ELSE CONVERT(NVARCHAR(50), U.Ship_Date,101) END AS Ship_Date, 
     U.Status, 
     U.total 
FROM 
(
    SELECT A.ID_NO, A.Ship_Date, A.Status, A.total 
    FROM TableA 

    UNION ALL 

    SELECT B.ID_NO, NULL AS Ship_Date, B.Status, B.total 
    FROM TableB 
) AS U 
+0

謝謝Holger。有沒有辦法包含一個空字符串而不是null? – rock 2012-07-17 15:54:41

+1

該列需要「DATETIME」值或「NULL」。 – RobB 2012-07-17 15:55:26

+0

@ranjith我改變了答案給你一個字符串日期或空字符串如果爲NULL。 – 2012-07-17 16:08:35

2

Ship_Datedate數據類型,爲什麼不使用NULL作爲虛擬佔位符?

TABLE B 
ID_NO INT, 
NULL, 
Status varchar(10), 
total decimal(12,2) 
2

您得到1900-01-01,因爲該列類型爲DATETIME。如果您希望它是「空的」,請使用NULL而不是''

嘗試:

select 
    ID_NO, 
    case 
     when Ship_Date is NULL then '' 
     else Ship_Date 
    end as Ship_Date, 
    Status, 
    total 
from 
(
    select 
     ID_NO, 
     Ship_Date, 
     Status, 
     total 
    from 
     table_a 

    union all 

    select 
     ID_NO, 
     NULL as Ship_Date, 
     Status, 
     total 
    from 
     table_b 
) combined 
+0

更新回答符合OP的顯示空字符串的請求。 – RobB 2012-07-17 16:01:11