在一定数量的行之后在新列上继续的SQL列表

时间:2011-07-18 21:04:24

标签: tsql

我正在使用SQL中的列表,说它给出了以下结果:

  

abcde

     

ABCDE

     

abcde

     

ABCDE

     

abcde

     

ABCDE

     

abcde

     

ABCDE

     

abcde

     

ABCDE

我想要的是下面的结果

  

abcde abcde abcde

     

abcde abcde abcde

     

abcde abcde abcde

     

abcde abcde abcde

     

abcde abcde abcde

也就是说,每当我的列表到达第五行时,我希望它继续使用新列

2 个答案:

答案 0 :(得分:2)

测试数据:

declare @t table (v varchar(10))

insert @t values ('abcde')
insert @t values ('abcde')
insert @t values ('abcde')
insert @t values ('abcde')
insert @t values ('abcde')
insert @t values ('abcde')
insert @t values ('abcde')
insert @t values ('abcde')
insert @t values ('abcde')
insert @t values ('abcde')
insert @t values ('abcde')

表达式:

;WITH x AS ( select (row_number() over(order by (select 1)) - 1)%5 [rn], v
FROM @t
) 
SELECT REPLACE(STUFF(( 
SELECT ',' + [v] 
FROM x t 
WHERE t.rn = x.rn
for xml path(''), type 
).value('.', 'varchar(max)'), 1, 1, ''), ',', ' ') [v] FROM x
GROUP BY rn

输出:

abcde abcde abcde
abcde abcde
abcde abcde
abcde abcde
abcde abcde

答案 1 :(得分:0)

SQL并没有真正为您提供以优雅的方式执行此操作的工具,因为它是一个数据stuart,这将被视为格式化问题。您应该使用循环工具和诸如此类的东西在演示文稿中解决这个问题。

如果你绝对必须在SQL中这样做,你可以使用光标,虽然它仍然是相当不愉快和不优雅的。