如果我有一个包含以下数据的表:
Test1
Test2
Test3
Test4
Test5
另一个表格的数据如下:
Foo1
Foo2
Foo3
我如何将后者与前者结合起来,例如:
Test1 Foo1
Test2 Foo2
Test3 Foo3
Test4 Foo1
Test5 Foo2
基本上对第一个表的所有内容重复第二个表中的相同序列。
编辑: 我还需要第二个表中的数据保持按顺序排列(它来自表变量),即使它们不是按字母顺序自然排列的。
因此,如果第二个表如下所示:
Foo2
Foo3
Foo1
结果应如下所示:
Test1 Foo2
Test2 Foo3
Test3 Foo1
Test4 Foo2
Test5 Foo3
编辑2:
第二个表的数据来自以下TVF
。我正在分割一个看起来像“Foo1,Foo2,Foo3”的字符串。我如何将序列添加到该拆分的结果中?
CREATE FUNCTION [dbo].[Split]
(
@Data varchar(max),
@Delimiter varchar(max)
)
RETURNS @Tokens table
(
Token varchar(max)
)
AS
BEGIN
while (charindex(@Delimiter, @Data) > 0)
begin
insert into @Tokens (Token)
select
ltrim(rtrim(substring(@Data,1,charindex(@Delimiter,@Data)-1)))
select
@Data = substring(
@Data,charindex(@Delimiter,@Data)+len(@Delimiter),len(@Data))
end
insert into @Tokens (Token)
select
ltrim(rtrim(@Data))
return
最佳答案
declare @T1 table(Col varchar(10))
declare @T2 table(Col varchar(10))
insert into @T1 values
('food1'),('food2'),('food3'),('food4'),('food5')
insert into @T2 values
('eat1'),('eat2'),('eat3')
;with C1 as
(
select col,
row_number() over(order by col) - 1 as rn
from @T1
),
C2 as
(
select col,
row_number() over(order by col) - 1 as rn
from @T2
)
select C1.col,
C2.Col
from C1
inner join C2
on (C1.rn % (select count(*) from C2)) = C2.rn
order by C1.Col
更新
要从拆分函数中获取序列,您可以在返回的表中添加一个标识字段。
CREATE FUNCTION [dbo].[Split]
(
@Data varchar(max),
@Delimiter varchar(max)
)
RETURNS @Tokens table
(
Token varchar(max),
ID int identity
)
AS
BEGIN
....
关于sql-server - 将重复序列连接到结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8496688/