SQL 行列转换问题,请高手指点。
declare@sqlvarchar(8000)set@sql='selectProducts'select@sql=@sql+',max(casematerialwhe...
declare @sql varchar(8000)
set @sql = 'select Products'
select @sql=@sql+',max(case material when '''+material +''' then quantity else 0 end) ['+material +']'
from (select distinct material from scll) as a
set @sql = @sql + ' from scll group by Products'
exec(@sql)
以上代码运行时总是报错,print(@sql)后发现是由于material字段的数据太多,导致生成的语句太长变量空间不足造成的,有什么办法解决这个问题,请高手指点。谢谢!
要转换成行的数据总共为325个,也就是说转换后有325列,加上Products'列共326,print(@sql)后发现,生成的语句不完整,select Products,max(case material when material1 then quantity else 0 end) [material ],
max(case material when material2 then quantity else 0 end) [material2 ]....依次进行,但到第58个时语句就不完整了,没有end,以及后面的列名直接加上了from scll group by Products
,有办法解决这个问题吗? 展开
set @sql = 'select Products'
select @sql=@sql+',max(case material when '''+material +''' then quantity else 0 end) ['+material +']'
from (select distinct material from scll) as a
set @sql = @sql + ' from scll group by Products'
exec(@sql)
以上代码运行时总是报错,print(@sql)后发现是由于material字段的数据太多,导致生成的语句太长变量空间不足造成的,有什么办法解决这个问题,请高手指点。谢谢!
要转换成行的数据总共为325个,也就是说转换后有325列,加上Products'列共326,print(@sql)后发现,生成的语句不完整,select Products,max(case material when material1 then quantity else 0 end) [material ],
max(case material when material2 then quantity else 0 end) [material2 ]....依次进行,但到第58个时语句就不完整了,没有end,以及后面的列名直接加上了from scll group by Products
,有办法解决这个问题吗? 展开
4个回答
展开全部
根据筛选列生成了新的数据行。
例如
select dz,[男]=sum(case when xb='男' then sl else 0 end),
[女]=sum(case when xb='女' then sl else 0 end)
from table1 group by dz
根据table1 中的数据行xb 分成了男女两列数据。
例如
select dz,[男]=sum(case when xb='男' then sl else 0 end),
[女]=sum(case when xb='女' then sl else 0 end)
from table1 group by dz
根据table1 中的数据行xb 分成了男女两列数据。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看你的样子是列转行,SQL每个版本都有相应的列限制,如果超出限制列你得想其它方法来处理
就算用别的方法来处理,select 最多支持4096个列,我想也不可以无限制地增加
就算用别的方法来处理,select 最多支持4096个列,我想也不可以无限制地增加
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我刚才试了一下你的方法,应该是可行的。
方法如下:
declare @sql varchar(8000)
set @sql = 'select page_type'
select @sql=@sql+',max(case updateTime when '''+updateTime +''' then updateTime else null end) ['+updateTime +']'
from (select distinct updateTime from userpage) as a
set @sql = @sql + ' from userpage group by page_type'
exec(@sql)
我个人觉得应该是的material 字段值超出了1024吧。
建议使用print(@sql)试一下,再减少一下字段试一试吧。
方法如下:
declare @sql varchar(8000)
set @sql = 'select page_type'
select @sql=@sql+',max(case updateTime when '''+updateTime +''' then updateTime else null end) ['+updateTime +']'
from (select distinct updateTime from userpage) as a
set @sql = @sql + ' from userpage group by page_type'
exec(@sql)
我个人觉得应该是的material 字段值超出了1024吧。
建议使用print(@sql)试一下,再减少一下字段试一试吧。
追问
我写在问题中那段代码是可行的,列转为行后,造成列太多,所以报错,减少字段后试了是可以了,如果我不减少有没有什么好的办法?
追答
你发一下你的sql语句我看一下print(@sql),是否超过了8000,空讲不知道啊。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询