首页 > 解决方案 > 将表 A 中的每一行与表 B 中的一行相关联,环绕

问题描述

我想创建一个包含其他两个表中数据组合的表。假设表 ONE 如下所示:

A
B
C
D
E
F

表二看起来像这样:

X
Y
Z

我想要的不是交叉连接或任何东西,我只希望 A 和 B 在一起,当 B 用完行时,重复,所以输出(表三)如下所示:

A X
B Y
C Z
D X
E Y
F Z

我不想添加或删除任何行。最终结果应具有与表 ONE 中完全相同的行数。如果它更容易,表一中的行数总是表二中行数的完美倍数,所以我不必担心部分匹配。如果表 ONE 有 12 行,那么表 2 将重复 4 次而不是 2 次,结果仍然是 12 行。

标签: sqlsql-servertsql

解决方案


您可以使用模运算:

select o.*, t.*
from (select o.*, row_number() over (order by (select null)) as seqnum
      from one o
     ) o join
     (select t.*, row_number() over (order by (select null)) as seqnum,
             count(*) over () as cnt
      from two
     ) t
     on (o.seqnum - 1) % cnt = t.seqnum - 1

这会为每个表添加一个枚举值。然后它使用模运算来匹配行。


推荐阅读