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
,有办法解决这个问题吗?
展开
 我来答
摆渡浮桥
2011-02-28 · TA获得超过3629个赞
知道大有可为答主
回答量:1610
采纳率:100%
帮助的人:2214万
展开全部
该问题的关键是SQL Server 2000字段大小限制了。
有个笨的办法,将325个物料分成两组(如果还不够,分成3组),用你这种方法分别进行行列转换,放入临时表,然后将临时表连接起来。

如果是SQL Server 2005就好办了,直接将@sql申明成varchar(max)就行了,它最大支持2GB,应该可以解决此问题。另外,SQL Server 2005专门针对行列转换,有了pivot子句。
手机用户56708
2011-02-27 · TA获得超过250个赞
知道答主
回答量:212
采纳率:0%
帮助的人:156万
展开全部
根据筛选列生成了新的数据行。
例如
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 分成了男女两列数据。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
你好师姐
2011-02-28 · TA获得超过123个赞
知道小有建树答主
回答量:177
采纳率:0%
帮助的人:140万
展开全部
看你的样子是列转行,SQL每个版本都有相应的列限制,如果超出限制列你得想其它方法来处理

就算用别的方法来处理,select 最多支持4096个列,我想也不可以无限制地增加
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
81872793
2011-02-28
知道答主
回答量:24
采纳率:0%
帮助的人:16万
展开全部
我刚才试了一下你的方法,应该是可行的。
方法如下:
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,空讲不知道啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式