Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将重复序列连接到结果_Sql Server_Tsql - Fatal编程技术网

Sql server 将重复序列连接到结果

Sql server 将重复序列连接到结果,sql-server,tsql,Sql Server,Tsql,如果我有一个包含如下数据的表: Test1 Test2 Test3 Test4 Test5 Foo1 Foo2 Foo3 以及另一个包含以下数据的表: Test1 Test2 Test3 Test4 Test5 Foo1 Foo2 Foo3 我如何将后者与前者结合起来,如: Test1 Foo1 Test2 Foo2 Test3 Foo3 Test4 Foo1 Test5 Foo2 基本上,对第一个表中的所有表重复第二个表中的相同序列 编辑: 我还需要第二个表中的数据保持这种

如果我有一个包含如下数据的表:

Test1
Test2
Test3
Test4
Test5
Foo1
Foo2
Foo3
以及另一个包含以下数据的表:

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
更新

要从分割函数中获取序列,可以在返回的表中添加标识字段

CREATE FUNCTION [dbo].[Split]
( 
    @Data varchar(max),
    @Delimiter varchar(max)
) 
RETURNS @Tokens table
(
    Token varchar(max),
    ID int identity
)
AS
BEGIN
 ....

这似乎正是我想要的。我只有一个问题,这样我才能更好地理解这个解决方案。C1 cte上-1的用途是什么?@JeremyCantell-
行数()
从1开始计数,因此我需要它来获得正确的模数
%
。如果C1上没有-1,您将有
eat2
作为
food1
上的匹配项。如果你问我,那就大错特错了:)。啊,这是有道理的。我有一个要补充的警告。如果你能回答这个问题,我将把它标记为正确答案。@JeremyCantell-在返回的表中添加一个标识字段。我已经更新了答案。谢谢!这是一个非常好的答案,它加深了我对CTE的理解。您如何对第二个表中的数据进行排序?您需要至少添加另一列。桌子上没有自然的秩序,你说得对。更多信息,请参见我的第二次编辑