Sql 在select join语句中添加自动递增列

Sql 在select join语句中添加自动递增列,sql,sql-server,tsql,Sql,Sql Server,Tsql,我需要根据特定的连接条件创建一个自动递增的id。我有两个表,每个表都有标识列。主表将和trxid列上的次表有关系。下面是示例数据 declare @t1 table (trxid int,data1 varchar(100), data2 varchar(100)) declare @m table (mid int, trxid int, mname varchar(100), mdate date) insert into @t1 select 1,'Test1','Test1' unio

我需要根据特定的连接条件创建一个自动递增的id。我有两个表,每个表都有标识列。主表将和trxid列上的次表有关系。下面是示例数据

declare @t1 table (trxid int,data1 varchar(100), data2 varchar(100))
declare @m table (mid int, trxid int, mname varchar(100), mdate date)

insert into @t1
select 1,'Test1','Test1'
union all
select 2,'Test2','Test2'

insert into @m
select 1,1,'Stage Gate1',GETDATE()
union all
select 2,1,'Stage Gate2',GETDATE()
union all
select 3,1,'Stage Gate3',GETDATE()
union all
select 4,1,'Stage Gate4',GETDATE()
union all
select 5,1,'Stage Gate5',GETDATE()
union all
select 6,1,'Stage Gate6',GETDATE()
union all
select 7,2,'Stage Gate1',GETDATE()
union all
select 8,2,'Stage Gate2',GETDATE()
union all
select 9,2,'Stage Gate3',GETDATE()
union all
select 10,2,'Stage Gate4',GETDATE()
union all
select 11,2,'Stage Gate5',GETDATE()
union all
select 12,2,'Stage Gate6',GETDATE()
union all
select 13,2,'Stage Gate7',GETDATE()
结果如下表所示

select t.trxid,m.mid,t.data1,t.data2,m.mname,m.mdate from @t1 t inner join @m m on(t.trxid=m.trxid)

   trxid       mid         data1   data2   mname           mdate
----------- ----------- ------- ------- --------------- ----------
1           1           Test1   Test1   Stage Gate1     2018-06-07
1           2           Test1   Test1   Stage Gate2     2018-06-07
1           3           Test1   Test1   Stage Gate3     2018-06-07
1           4           Test1   Test1   Stage Gate4     2018-06-07
1           5           Test1   Test1   Stage Gate5     2018-06-07
1           6           Test1   Test1   Stage Gate6     2018-06-07
2           7           Test2   Test2   Stage Gate1     2018-06-07
2           8           Test2   Test2   Stage Gate2     2018-06-07
2           9           Test2   Test2   Stage Gate3     2018-06-07
2           10          Test2   Test2   Stage Gate4     2018-06-07
2           11          Test2   Test2   Stage Gate5     2018-06-07
2           12          Test2   Test2   Stage Gate6     2018-06-07
2           13          Test2   Test2   Stage Gate7     2018-06-07
预期结果是

trxid       id          mid         data1   data2   mname           mdate
----------- ----------- ----------- ------- ------- --------------- ----------
1           1           1           Test1   Test1   Stage Gate1     2018-06-07
1           2           2           Test1   Test1   Stage Gate2     2018-06-07
1           3           3           Test1   Test1   Stage Gate3     2018-06-07
1           4           4           Test1   Test1   Stage Gate4     2018-06-07
1           5           5           Test1   Test1   Stage Gate5     2018-06-07
1           6           6           Test1   Test1   Stage Gate6     2018-06-07
2           1           7           Test2   Test2   Stage Gate1     2018-06-07
2           2           8           Test2   Test2   Stage Gate2     2018-06-07
2           3           9           Test2   Test2   Stage Gate3     2018-06-07
2           4           10          Test2   Test2   Stage Gate4     2018-06-07
2           5           11          Test2   Test2   Stage Gate5     2018-06-07
2           6           12          Test2   Test2   Stage Gate6     2018-06-07
2           7           13          Test2   Test2   Stage Gate7     2018-06-07

假设不需要保留此ID,然后根据保留的数据生成新的唯一增量编号,则可以使用窗口函数为每组数据生成一个行编号:

select t.trxid
      ,m.mid
      ,row_number() over (partition by t.trxid order by m.mid) as id
      ,t.data1
      ,t.data2
      ,m.mname
      ,m.mdate
from @t1 t
    inner join @m m
        on(t.trxid = m.trxid)

如果您需要基于已保存到其他位置的表中的数据进行查询,则您的查询需要更加复杂。

西方最快的窗口函数