【发布时间】:2019-10-10 09:51:29
【问题描述】:
我有一个表,其中一个字段名为City。
以下是数据。
城市
--------
A
B
C
D
E
F
G
H
输出也将作为列
编写查询或存储过程或函数?
如果通过2,查询结果会在下面
Col1 Col2
A B
C D
E F
G H
如果通过3,查询结果会在下面
Col1 Col2 Col3
A B C
D E F
G H
如果通过4,查询结果会在下面
Col1 Col2 Col3 Clo4
A B C D
E F G H
--Here script for creating and adding data into temp table
create table #Cities( City varchar(max) )
insert into #Cities values
( 'A' ),
( 'B' ),
( 'C' ),
( 'D' ),
( 'E' ),
( 'F' ),
( 'G' ),
( 'H' )
declare @what_I_pass as int = 2; -- Here pass the number you want.
with Q1 as
(
select *, ROW_NUMBER() over (order by City) - 1 as n
from #Cities
),
Q2 as
(
select City, n / @what_I_pass as rn, n % @what_I_pass as cn
from Q1
)
select (stuff((select ' ' + City from Q2 as q where q.rn = Q2.rn order by cn for xml path('')), 1, 1, '')) as Result
from Q2
group by rn
order by rn
【问题讨论】:
-
要获取动态列数,需要使用动态SQL。就个人而言,这似乎是您应该在表示层中做的事情。
-
检查我编辑的答案
标签: sql sql-server tsql sql-server-2008