34,837
社区成员




数据表中有4条记录,怎么将这4条记录循环显示出7条记录?
表:tb(id,name),表中数据如下:
id name
01 小明
02 王磊
03 张飞
04 高峰
通过SQL语句得到如下记录效果:
01 小明
02 王磊
03 张飞
04 高峰
01 小明
02 王磊
03 张飞
--测试数据
if not object_id(N'tab') is null
drop table tab
Go
Create table tab([id] nvarchar(22),[name] nvarchar(22))
Insert tab
select N'01',N'小明' union all
select N'02',N'王磊' union all
select N'03',N'张飞' union all
select N'04',N'高峰'
Go
--测试数据结束
SELECT id,
t.NAME
FROM
(SELECT *, ROW_NUMBER() OVER (ORDER BY id) rn FROM tab) t
JOIN master..spt_values
ON type = 'P'
AND number <= 6
AND (number % 4 + 1) = rn;
USE tempdb
GO
IF OBJECT_ID('dbo.[tb]') IS NOT NULL
DROP TABLE dbo.[tb]
GO
CREATE TABLE dbo.[tb](
[id] NVARCHAR(MAX)
,[name] NVARCHAR(MAX)
)
GO
SET NOCOUNT ON
INSERT INTO dbo.[tb] VALUES(N'01',N'小明')
INSERT INTO dbo.[tb] VALUES(N'02',N'王磊')
INSERT INTO dbo.[tb] VALUES(N'03',N'张飞')
INSERT INTO dbo.[tb] VALUES(N'04',N'高峰')
----------- 以上为测试表及测试数据 -----------
SELECT TOP 7 a.*
FROM tb AS a CROSS JOIN MASTER.dbo.spt_values AS b
WHERE b.type='P'
ORDER BY b.number
/*
id name
01 小明
02 王磊
03 张飞
04 高峰
01 小明
02 王磊
03 张飞
*/
不一定是 4 和 7,假设循环显示 n,那么把这个 n 做一个序号列 id,从 1 开始。
需要循环显示 m 条记录,m 条记录做一个序号列 id2,从 0 开始。
对 id 列取模 m,余数是新列 mod,用 mod 和 id2 左连接匹配即可。