SQL Server UNION和偏移主键

时间:2017-11-28 23:19:49

标签: sql sql-server

我想结合两个表,并在结果中,让第二个表的列偏移第一个表中该列的最大值。

示例:假设我有两个表,其中两个列具有相同的列:

表A

 a | b | c
 1 | 1 | 1
 2 | 2 | 2

表B

 a | b | c
 1 | 6 | 6
 2 | 7 | 7

我希望能够执行类似UNION ALL的操作,从而产生:

结果

 a | b | c
 1 | 1 | 1
 2 | 2 | 2
 3 | 6 | 6
 4 | 7 | 7

通过执行实际的UNION ALL,我的结果是:

结果

 a | b | c
 1 | 1 | 1
 2 | 2 | 2
 1 | 6 | 6
 2 | 7 | 7

更新:我还想把它放到VIEW中,这对我来说很复杂。

提前致谢

2 个答案:

答案 0 :(得分:2)

您可以从表A中获取最大a值,并将其从表B添加到列a

select a,b,c from tblA
union all
select a+t.max_a,b,c from tblB 
cross join (select max(a) as max_a from tblA) t

答案 1 :(得分:-1)

对于两个表都需要遵循原始值,列[a]的值是什么?

select a = row_number() over (order by a), b, c
from
(
    select a, b, c from tableA
    union all
    select a, b, c from tableB
) d

或者,使用row_number()生成tableb的序列

select  a = coalesce(a, max(a) over() + row_number() over(order by a)),
    b, c
from
(
    select  a, b, c
    from    tableA
    union all
    select  a = NULL, b, c
    from    tableB
) d
order by a