为了账号安全,请及时绑定邮箱和手机立即绑定

关于交叉数据报表的问题

关于交叉数据报表的问题

智慧大石 2018-12-03 21:08:11
<P>有一个问卷调查表:<BR>IP&nbsp;&nbsp;&nbsp;&nbsp; 问题  结果<BR>ip1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; A<BR>ip1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; B<BR>ip1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp; C<BR>ip2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; B<BR>ip2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; C<BR>ip2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp; C</P> <P>想生成的报表如下:<BR>IP&nbsp; 问题1 问题2 问题3&nbsp; <BR>x1&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C<BR>X2&nbsp;&nbsp; B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C</P> <P>该如何实现呢?</P> <P>网上的解决方案都用case和sum来合并,但我的字段是varchar的,不是数字类型的,该如何实现呢?谢谢!</P>
查看完整描述

2 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

tempa表: IP 问题  结果 ip1 1 A ip1 2 B ip1 3 C IP2 1 B IP2 2 C IP2 3 C code: declare @sql varchar(4000) set @sql = 'select IP ' select @sql = @sql + ',MAX(case 问题 when '''+问题+''' then 结果 end) [问题'+问题++']' from (select distinct 问题 from tempa ) as a select @sql = @sql+'into tempb from tempa group by ip ' --print @sql exec(@sql) select * from tempb 结果: IP 问题1 问题2 问题3 ip1 A B C IP2 B C C -----------------------完------------------

查看完整回答
反对 回复 2018-12-07
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

数据不多可以全部选到内存里面或者分批加载, 构造成对象再筛选. 挺不喜欢写一堆复杂的Sql,维护起来也麻烦.

查看完整回答
反对 回复 2018-12-07
  • 2 回答
  • 0 关注
  • 551 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信