我有一个关于我尝试在sql server中组合两个表的问题......
我有一个表有大约30列(表a),第二个表有大约5(表b),这5个表存在于30列表中。我希望能够将表b添加到表a的末尾,并且只对新行中不存在的列使用0值。
有办法做到这一点吗?显然,如果我想保留表a中的其他列,常规联合将无法工作。
答案 0 :(得分:3)
基本思路是这样的,假设col3
中不存在TableB
:
select col1, col2, col3 from TableA
union all
select col1, col2, 0 as col3 from TableB
小心保持每列中的数据类型相同。
要将TableB
记录保留在最后,请执行:
select col1, col2, col3
from (
select 1 as Rank, col1, col2, col3 from TableA
union all
select 2 as Rank, col1, col2, 0 as col3 from TableB
) a
order by Rank
答案 1 :(得分:0)
您只需将行插入:
即可insert into A(col1, col2, col3, col4, col5)
select col1, col2, col3, col4, col5
from B
这将应用其余列的默认值。默认值通常为NULL,但可以在create table语句中更改。要获得0,您必须包含列并指定值:
insert into A(col1, col2, col3, col4, col5, col6 . . . col30)
select col1, col2, col3, col4, col5, 0 . . . 0
from B