Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态旋转问题+;sql server 2005_Sql_Sql Server_Sql Server 2005_Tsql_Pivot - Fatal编程技术网

动态旋转问题+;sql server 2005

动态旋转问题+;sql server 2005,sql,sql-server,sql-server-2005,tsql,pivot,Sql,Sql Server,Sql Server 2005,Tsql,Pivot,我有个问题。实际上,在我们的应用程序中,早些时候客户被允许每月支付3个installemnt,但现在它可以是任何数字。我有前面的问题 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 un

我有个问题。实际上,在我们的应用程序中,早些时候客户被允许每月支付3个installemnt,但现在它可以是任何数字。我有前面的问题

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正在做的,但他会动态地逐行选择最大列数,您不能更改输出列数

如果我理解正确,您必须为最大列数构建它,并为未使用的列提供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)。

您可以动态生成查询:

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)