请教行列转换的问题

95b1 2005-09-05 06:41:29
有表如下:
答卷| 题目| 答案
答卷1 题目1 答案1
答卷1 题目2 答案2
答卷1 题目3 答案3
答卷2 题目1 答案4
答卷2 题目2 答案5
答卷2 题目3 答案6
....
想得到如下显示结果:
题目| 答卷1|答卷2.....
题目1 答案1 答案4
题目2 答案2 答案5
题目3 答案3 答案6


不行了,弄不出来了,恳请知道如何做的指点一下


...全文
208 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
95b1 2005-09-05
  • 打赏
  • 举报
回复
可以了,谢谢各位,大家都在加班阿?辛苦辛苦,结贴了,再次感谢
zlp321002 2005-09-05
  • 打赏
  • 举报
回复
--我的答案就是动态变化的啊!学生填什么答案,表头就什么样的!
--把我的Varchar(2000)------->改成 varchar(8000)支持更多表头字段!~

--你测试后有什么问题吗??
95b1 2005-09-05
  • 打赏
  • 举报
回复
谢谢vivianfdlpw(),题型是填空题,答案是学生自己填的,所以内容不规范,我上面只是举了个例子
vivianfdlpw 2005-09-05
  • 打赏
  • 举报
回复
create table tb
(
[答卷] varchar(10),
[题目] varchar(10),
[答案] varchar(10)
)
insert tb
select '答卷1','题目1','答案1' union
select '答卷1','题目2','答案2' union
select '答卷1','题目3','答案3' union
select '答卷2','题目1','答案4' union
select '答卷2','题目2','答案5' union
select '答卷2','题目3','答案6'

--查询
declare @sql varchar(8000),
@i int
select @i=isnull(@i,0)+1
,@sql=isnull(@sql,'')+',[答卷'+convert(varchar,@i)+']=max(case when [答卷]=''答卷'+convert(varchar,@i)+''' then [答案] else null end)'
from tb
group by [答卷]

select @sql='select 题目'+@sql+' from tb group by 题目'
exec(@sql)

--删除测试环境
drop table tb

--结果
/*
题目 答卷1 答卷2
---------- ---------- ----------
题目1 答案1 答案4
题目2 答案2 答案5
题目3 答案3 答案6
*/
zlp321002 2005-09-05
  • 打赏
  • 举报
回复
--创建测试环境
create table 表 (答卷 varchar(10),题目 varchar(10),答案 varchar(10))
insert into 表 select '答卷1','题目1','答案1'
union all select '答卷1','题目2','答案2'
union all select '答卷1','题目3','答案3'
union all select '答卷2','题目1','答案4'
union all select '答卷2','题目2','答案5'
union all select '答卷2','题目3','答案6'

--动态SQL
declare @s varchar(2000)
set @s='select 题目 '
select @s=@s+',['+答卷+']=max(case when 答卷='''+答卷+''' then 答案 end )'
from 表
group by 答卷
set @s=@s+' from 表 Group by 题目'
exec (@s)

--结果
题目 答卷1 答卷2
---------- ---------- ----------
题目1 答案1 答案4
题目2 答案2 答案5
题目3 答案3 答案6

--删除测试环境
drop table A
zhangyang555 2005-09-05
  • 打赏
  • 举报
回复
不用执行,vivianfdlpw() 的方法肯定可以,这种问题是他的拿手好戏了,呵呵

vivianfdlpw 2005-09-05
  • 打赏
  • 举报
回复
declare @sql varchar(8000),
@i int
select @i=isnull(@i,0)+1
,@sql=isnull(@sql,'')+',[答卷'+convert(varchar,@i)+']=max(case when [答卷]=''答卷'+convert(varchar,@i)+''' then [答案'+convert(varchar,@i)+'] else 0 end)'
from 表
group by 答卷

select @sql='select 题目'+@sql+' from 表 group by 题目'
exec(@sql)
vivianfdlpw 2005-09-05
  • 打赏
  • 举报
回复
declare @sql varchar(8000),
@i int
select @sql=isnull(@sql,'')+',[答卷'+convert(varchar,@i)+']=max(case when [答卷]=''答卷'+convert(varchar,@i)+''' then [答案'+convert(varchar,@i)+'] else 0 end)'
,@i=isnull(@i,0)+1
from 表
group by 答卷

select @sql='select 题目'+@sql+' from 表 group by 题目'
exec(@sql)
vivianfdlpw 2005-09-05
  • 打赏
  • 举报
回复
declare @sql varchar(8000),
@i int
select @sql=isnull(@sql,'')+',[答卷'+convert(varchar,@i)+']=max(case when [答卷]=''答卷'+convert(varchar,@i)+''' then [答案'+convert(varchar,@i)+'] else 0 end)'
,@i=@i+1
from 表
group by 答卷

select @sql='select 题目'+@sql+' from 表 group by 题目'
exec(@sql)
95b1 2005-09-05
  • 打赏
  • 举报
回复
字段类型都是varchar,谢谢热心人指点

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧