如何在SQL Server中基于#T1和#T2生成指定循环关联输出?
实现两个表的循环匹配输出
嘿,这问题我熟!你想要把#T1里的A、B、C循环对应#T2的1到7,输出交替循环的结果对吧?我给你整理好解决方案啦👇
首先先确认你的输入表结构和数据:
CREATE TABLE #T1 (ID VARCHAR(10)) INSERT INTO #T1 SELECT 'A' UNION SELECT 'B' UNION SELECT 'C' CREATE TABLE #T2 (ID VARCHAR(10)) INSERT INTO #T2 SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7
解决方案SQL
SELECT t1.ID, t2.ID FROM ( -- 为#T2的每条数据按ID顺序生成行号 SELECT ID, ROW_NUMBER() OVER (ORDER BY ID) AS rn FROM #T2 ) t2 JOIN ( -- 为#T1生成行号,同时获取总条数用于循环计算 SELECT ID, ROW_NUMBER() OVER (ORDER BY ID) AS rn, COUNT(*) OVER () AS cnt FROM #T1 ) t1 ON (t2.rn - 1) % t1.cnt + 1 = t1.rn ORDER BY t2.rn
思路解释
- 第一步给#T2的数据按ID排序生成行号
rn,确保我们能按1到7的顺序处理每条数据; - 第二步给#T1的数据生成行号,同时用
COUNT(*) OVER ()拿到#T1的总记录数(这里是3); - 核心是用取模运算
(t2.rn - 1) % t1.cnt + 1,让#T2的行号循环对应#T1的行号:比如行号4对应(4-1)%3+1=1,也就是#T1的A;行号5对应(5-1)%3+1=2,对应B,以此类推; - 最后按#T2的行号排序,就能得到你期望的循环输出结果。
内容的提问来源于stack exchange,提问作者Aryan Sena
相关产品推荐
相关产品推荐

