sql server合并两个具有不同结构的表

时间:2012-07-17 15:48:28

标签: sql 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 ALL,在表B中包含一个虚拟列,如下所示

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

但是在结果集中我得到1900-01-01作为Ship_Date而不是''。如何消除这个?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

Ship_Datedate数据类型,为什么不使用NULL作为虚拟占位符呢?

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

答案 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