格式化T-SQL ResultSet

时间:2011-08-26 11:40:22

标签: tsql

全部,

我在T-Sql中有大约3-4个查询生成了以下ResultSet。结果看起来像这样:

月付款
1月200日
200年2月
300年3月
4月200日
6月200
July 200
8月200日
200年9月
10月200日
11月200日
12月200日

现在,根据用户定义的值,让我们说4,我需要像这样安排它们。

月付款
1月; 2月; 3月; 2月2日
5月; 6月; 7月; 200年8月
.............等等。

如果用户选择了3,那么,

月付款
1月; 2月; 2月3日
四月;五月;二月200
.............等等。

我该怎么做?有什么建议? 提前致谢!! :))

2 个答案:

答案 0 :(得分:2)

老实说,我不知道如何处理付款,因为你还没有描述它,这是一种用recusive sql解决它的方法

declare @t table([Month] varchar(12), Payment int)
declare @uservalue int
set  @uservalue = 3
insert @t values('January',200)
insert @t values('February', 200)
insert @t values(' March', 200)
insert @t values('April', 200)
insert @t values('May', 200)
insert @t values('June', 200)
insert @t values('July', 200)
insert @t values('August', 200)
insert @t values('September', 200)
insert @t values('October', 200)
insert @t values('November', 200)
insert @t values('December', 200)

;with a as(
select month, payment, rn = row_number() over (order by (select 1))
from @t
), b as
(
select cast(month as varchar(200)) month, payment, rn
from a where (rn - 1) % @uservalue = 0
union all
select cast(b.month +';'+ a.month as varchar(200)), a.payment, a.rn
from b join a on a.rn - 1 = b.rn and b.rn %@uservalue > 0
)
select month, payment from b where rn % @uservalue = 0

答案 1 :(得分:0)

这是一个xml解决方案

declare @t table([Month] varchar(12), Payment int)
declare @uservalue int
set  @uservalue = 3
insert @t values('January',200)
insert @t values('February', 200)
insert @t values(' March', 200)
insert @t values('April', 200)
insert @t values('May', 200)
insert @t values('June', 200)
insert @t values('July', 200)
insert @t values('August', 200)
insert @t values('September', 200)
insert @t values('October', 200)
insert @t values('November', 200)
insert @t values('December', 200)

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