sql - 在 select join 语句上添加自动递增列
问题描述
我需要根据某些连接条件创建一个自动递增的 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,然后根据持久化的数据生成新的唯一增量数字,您可以使用窗口函数为row_number
您的每组数据生成一个:
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)
如果您需要基于您已经保存到其他地方的表中的数据,您的查询将需要更复杂。
推荐阅读
- python-3.x - 需要一些关于个人计划的建议
- c - 使输入在点击向上箭头而不是 ^[[A in C 时恢复前一个
- r - ggplot2 设置特定颜色个别类别
- python - 如何使用 django 添加产品数量并更新购物车中的总数?
- binary - Java:将 int 转换为字节时,二进制补码如何工作?
- php - 为购物车中的 foreach() 提供的参数无效
- azure - 使用 SSIS 脚本任务连接到使用自托管 IR 作为 ADF 中 Azure-SSIS IR 代理的本地服务器
- javascript - EJS文件不执行外部js函数
- google-maps - 关于 Google Cloud 项目计费的问题
- python - 如何使用正则表达式转换我的代码