SQL 行列转换问题,请高手指点。
发布网友
发布时间:2022-04-30 20:45
我来回答
共4个回答
热心网友
时间:2022-04-30 22:14
该问题的关键是SQL Server 2000字段大小*了。
有个笨的办法,将325个物料分成两组(如果还不够,分成3组),用你这种方法分别进行行列转换,放入临时表,然后将临时表连接起来。
如果是SQL Server 2005就好办了,直接将@sql申明成varchar(max)就行了,它最大支持2GB,应该可以解决此问题。另外,SQL Server 2005专门针对行列转换,有了pivot子句。
热心网友
时间:2022-04-30 23:32
根据筛选列生成了新的数据行。
例如
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 分成了男女两列数据。
热心网友
时间:2022-05-01 01:07
看你的样子是列转行,SQL每个版本都有相应的列*,如果超出*列你得想其它方法来处理
就算用别的方法来处理,select 最多支持4096个列,我想也不可以无*地增加
热心网友
时间:2022-05-01 02:58
我刚才试了一下你的方法,应该是可行的。
方法如下:
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,空讲不知道啊。