我有一种情况,我必须在不丢失任何数据的情况下组合两个表。这两个表有不同的结构。以下是我的表的结构
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而不是''。如何消除这个?
答案 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_Date
是date
数据类型,为什么不使用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