数据表中有4条记录,怎么将这4条记录循环显示出7条记录?

那片夕阳 2023-01-05 14:17:56

数据表中有4条记录,怎么将这4条记录循环显示出7条记录?

表:tb(id,name),表中数据如下:

id      name
01     小明
02     王磊
03     张飞
04     高峰

通过SQL语句得到如下记录效果:
01     小明
02     王磊
03     张飞
04     高峰
01     小明
02     王磊
03     张飞

...全文
73 3 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 版主 01-06
  • 打赏
  • 举报
回复

--测试数据
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;

img

吉普赛的歌 版主 01-05
  • 打赏
  • 举报
回复 1

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    张飞
*/

  • 打赏
  • 举报
回复 1

不一定是 4 和 7,假设循环显示 n,那么把这个 n 做一个序号列 id,从 1 开始。
需要循环显示 m 条记录,m 条记录做一个序号列 id2,从 0 开始。
对 id 列取模 m,余数是新列 mod,用 mod 和 id2 左连接匹配即可。

相关推荐
发帖
MS-SQL Server

3.4w+

社区成员

MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
帖子事件
创建了帖子
2023-01-05 14:17
社区公告
暂无公告