Проблема в динамическом повороте + sql server 2005 - PullRequest
0 голосов
/ 25 октября 2009

У меня проблема. На самом деле в нашем приложении ранее клиенту было разрешено платить 3 инсталляций в месяц, но теперь это может быть любое число. Итак, у меня есть предыдущий запрос

declare @tbl table([MonthName] varchar(50), [Installment] int)

insert into @tbl select 'Jan',100 union all

select 'Jan',200 union all select 'Jan',300 union all

select 'Feb',100 union all

select 'Feb',200 union all select 'Feb',300



select [MonthName]

        ,[100] as '1st installment'

        ,[200] as '2nd installment'

        ,[300] as '3rd installment'

from

(select [MonthName],[Installment] from @tbl)as x

pivot

(max([Installment]) for [Installment] in

([100],[200],[300]))as pvt

Вывод это

MonthName   1st installment 2nd installment 3rd installment

Feb             100              200            300

Jan             100              200            300

Но поскольку я говорю, что взносы могут меняться сейчас (скажем, через 1 месяц это может быть 4, а в следующем месяце это может быть 5, 3 или 6), так как я могу сделать динамический поворот колонки в этом случае? 1007 *

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 25 октября 2009

Вы можете построить запрос динамически:

declare @installment_list varchar(max)
select @installment_list = IsNull(@installment_list,'') + 
    '[' + cast(Installment as varchar(32)) + '],'
from #tbl
group by Installment

-- Remove last comma
set @installment_list = left(@installment_list,len(@installment_list)-1)

declare @dynquery varchar(max)
set @dynquery = 'select * ' +
    'from #tbl ' +
    'pivot ( ' +
    '   max([Installment]) ' +
    '   for [Installment] ' +
    '   in (' + @installment_list + ') ' +
    ') as pvt'

exec (@dynquery)

Обратите внимание, что переменные таблицы не видны внутри exec (), поэтому я изменил временную переменную (#tbl вместо @tbl).

2 голосов
/ 25 октября 2009

Строка за строкой, вы не можете изменить количество выходных столбцов.

Если я правильно понимаю, вам придется построить его для максимального количества столбцов и дать NULL / 0 для неиспользуемых столбцов.

Редактировать: это то, что делает Андомар, но он динамически выбирает максимальное количество столбцов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...