SQL Server联合功能?

时间:2012-08-14 16:35:12

标签: sql sql-server-2005

我有一个关于我尝试在sql server中组合两个表的问题......

我有一个表有大约30列(表a),第二个表有大约5(表b),这5个表存在于30列表中。我希望能够将表b添加到表a的末尾,并且只对新行中不存在的列使用0值。

有办法做到这一点吗?显然,如果我想保留表a中的其他列,常规联合将无法工作。

2 个答案:

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