以下是我正在加入的表的示例(注意:这些表具有完全相同的模式但位于不同的数据库中,我正在尝试将它们组合在一起):
Database 1 Table
UniqID UniqID2 Number
100 150 1
100 151 2
Database 2 Table
UniqID UniqID2 Number
100 152 2
100 153 3
我正在尝试将Table2合并到Table1中,并且我正在加入Table1.UniqID = Table2.UniqID
。我不希望在Number列中有任何重叠值,这就是我想要的结果:
Table 1
UniqID UniqID2 Number
100 150 1
100 151 2
100 152 3
100 153 4
这是我到目前为止的查询,但它只更新表2中的行,其中Number = 2并且不会增加Number = 3行。如何调整我的查询?
UPDATE db2
Set db2.Number = db2.Number +
(SELECT MAX(Number) FROM [Database 1]..db1 WHERE UniqID = db2.UniqID)
FROM [Database 2]..table db2
INNER JOIN [Database 1]..Table db1
ON db1.UniqID = db2.UniqID
AND db1.Number = db2.Number
这就是我的数据库2表结果现在的样子:
Database 2 Table
UniqID UniqID2 Number
100 152 3
100 153 3
基本上,唯一的区别是我希望Number = 3在第二列中为Number = 4.
答案 0 :(得分:1)
我认为您需要union all
查询和insert
:
insert into table1(UniqID, UniqID2, Number)
select t2.UniqID, t2.UniqID2,
(x.maxn + row_number() over (order by (select null) ))
from table2 t2 cross join
(select max(number) as maxn from table1) x;
答案 1 :(得分:0)
不同的appraoch可能是
UPDATE t2
SET t2.Number = t1.T1Number + 1
FROM table2 t2
INNER JOIN (SELECT uniqid, uniqid2, number as T1Number from Table1
union
SELECT uniqid, uniqid2, number as T1Number from Table2
) t1
ON t1.uniqid = t2.uniqid and t1.UniqID2 = t2.UniqID2-1
答案 2 :(得分:0)
另一种适用于SQL 2012的方法..
;With cte
as
(select *
from
#t
union all
select *
from #t1
)
select uniqid,uniqid2,
case when lag(number) over (order by uniqid,uniqid2) is null then number
when lead(number) over (order by uniqid,uniqid2) is null
then number+1 else lead(number) over (order by uniqid,uniqid2) end as nextnumber
from cte