34,837
社区成员




表:tb(id,name,startpoint),表中数据如下:
id name stratpoint
1 小明 0
2 王磊 0
3 张飞 1
4 高峰 0
假如数据表中有4条记录,从规定的循环记录开始点,怎么将这4条记录循环显示出7条记录?然后将结束的那条记录对应的startpoint值设定成1,其余的都是0;
如上表所示,循环开始点是startpoint值为1的记录(即 id为3的记录),想要的结果如下:
id name stratpoint
3 张飞 0
4 高峰 0
1 小明 0
2 王磊 0
3 张飞 0
4 高峰 0
1 小明 1
感谢版主!!!
--测试数据
if not object_id(N'tab') is null
drop table tab
Go
Create table tab([id] nvarchar(22),[name] nvarchar(22),stratpoint INT)
Insert tab
select N'01',N'小明',0 union all
select N'02',N'王磊',0 union all
select N'03',N'张飞',1 union all
select N'04',N'高峰',0
Go
--测试数据结束
SELECT id,
t.NAME,
CASE WHEN number=6 THEN 1 ELSE 0 END stratpoint
FROM
(SELECT *, ROW_NUMBER() OVER (ORDER BY stratpoint DESC) rn FROM tab) t
JOIN master..spt_values
ON type = 'P'
AND number <= 6
AND (number % 4 + 1) = rn;