0

私は問題があります。実際、私たちのアプリケーションでは、以前は顧客が 1 か月あたり 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 回になる可能性があります)。

前もって感謝します

4

2 に答える 2

2

クエリを動的に作成できます。

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)に変更したことに注意してください。

于 2009-10-25T10:39:21.227 に答える