Форматирование T-SQL ResultSet - PullRequest
1 голос
/ 26 августа 2011

H Все,

У меня есть следующий ResultSet, сгенерированный примерно 3-4 запросами в T-Sql.Результат выглядит примерно так:

Месячный платеж Январь 200 Февраль 200 Март 200 апреля 200 июнь 200 Июль 200 Август 200 сентябрь 200 октября 200 ноября 200 декабря 200

Теперь, в зависимости от пользовательского значения, скажем, 4, мне нужно расположить их примерно так:

Месячный платеж январь; февраль; март; апрель 200 май; июнь; июль; август 200 ............. скоро.

Если пользователь выбрал 3, то

Месячный платеж январь; февраль; март 200 апрель; май; июнь 200 ............. скоро.

Как мне это сделать?Какие-либо предложения?Заранее спасибо!!:))

Ответы [ 2 ]

2 голосов
/ 26 августа 2011

Я, честно говоря, не знаю, как обрабатывать платежи, поскольку вы не описали его, вот способ решить эту проблему с помощью рекурсивного 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
0 голосов
/ 26 августа 2011

Вот 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...