簡體   English   中英

動態數據透視+ SQL Server 2005中的問題

[英]Problem in dynamic pivoting + sql server 2005

我有個問題。 實際上,在我們的應用程序中,較早的客戶被允許每月支付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),那么在這種情況下如何進行動態列透視?

提前致謝

逐行,您不能更改輸出列數。

如果我理解正確,則必須為最大列數構建它,並為未使用的列提供NULL / 0。

編輯:這是Andomar在做的,但是他動態地選擇了最大列數

您可以動態構建查詢:

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)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM