Добавление автоматически увеличенного столбца в операторе select join - PullRequest
0 голосов
/ 07 июня 2018

У меня есть требование создать автоматически увеличенный идентификатор на основе определенного условия соединения.У меня есть две таблицы, каждая из которых имеет столбец идентичности.Первичная таблица будет иметь связь со вторичной таблицей в столбце «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

1 Ответ

0 голосов
/ 07 июня 2018

Если вам не нужно сохранять этот идентификатор, а затем генерировать новые уникальные инкрементные числа на основе сохраняемых данных, вы можете использовать оконные функции для генерации 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)

Если вам нужно основать это на данных, которые вы уже сохранили в таблице в другом месте, ваш запрос должен быть более сложным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...