我正在使用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
也就是说,每当我的列表到达第五行时,我希望它继续使用新列
答案 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中这样做,你可以使用光标,虽然它仍然是相当不愉快和不优雅的。