如果我的表格包含以下数据:
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
EDIT2:
第二个表的数据来自以下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
答案 0 :(得分:4)
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
<强>更新强>
要从split函数中获取序列,可以在返回的表中添加一个标识字段。
CREATE FUNCTION [dbo].[Split]
(
@Data varchar(max),
@Delimiter varchar(max)
)
RETURNS @Tokens table
(
Token varchar(max),
ID int identity
)
AS
BEGIN
....