我有问题。实际上在我们的申请中,早些时候客户被允许每月支付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),那么在这种情况下如何制作动态列旋转呢? / p>
提前致谢
答案 0 :(得分:2)
逐行,您无法更改输出列的数量。
如果我理解正确,你必须为最大列数构建它,并为未使用的列提供NULL / 0。
编辑:这是Andomar正在做的事情,但他动态选择最大列数
答案 1 :(得分: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)。