[英]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.