这样的复杂统计如何处理?

wuaza 2006-02-13 12:48:10
表a
姓名 t1 t2 t3
张三 030401 05 0504
李四 050401 0304 020105

t1,t2,t3分别代表三道多选题,如张三第一题是“030401”,则说明张三第一题选了"03","04","01"这三个选项。
现在想统计每道题每个选项有多少人选择,即结果表如下:
题号 选项 人数
1 01 2
1 02 0
1 03 1
1 04 2
1 05 1
2 01 0
2 02 0
2 03 1
2 04 1
2 05 1
3 01 1
3 02 1
3 03 0
3 04 1
3 05 2
...全文
93 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
$扫地僧$ 2006-02-13
  • 打赏
  • 举报
回复
try:
create table A
(
姓名 varchar(10),
t1 varchar(10),
t2 varchar(10),
t3 varchar(10)
)

insert A select '张三','030401','05','0504'
insert A select '李四','050401','0304','020501'

declare @T_SQL varchar(8000)
declare @i int
declare @j int
set @i=1
set @j=1
set @T_SQL=''
while @i<=3
begin
while @j<=5
begin
set @T_SQL =@T_SQL + 'select ' + cast(@i as varchar) + ' as 题号,''' + right(cast(100+@j as varchar) ,2) +''' as 选项,sum(case when charindex(''' + right(cast(100+@j as varchar) ,2) + ''',t'+ cast(@i as varchar) +')>0 then 1 else 0 end) 人数 from A union '
set @j=@j+1
end
set @j=1
set @i=@i+1
end
set @T_SQL=left(@T_SQL,len(@T_SQL)-len('union '))
exec (@T_SQL)
-狙击手- 2006-02-13
  • 打赏
  • 举报
回复
declare @t table(姓名 varchar(6),t1 varchar(6),t2 varchar(6),t3 varchar(6))
insert @t select '张三','030401','05','0504' union
select '李四','050401','0304','020105'

declare @t1 varchar(6)
declare @t2 varchar(6)
declare @t3 varchar(6)
set @t1 = ''
set @t2 = ''
set @t3 = ''
select t1,t2 into #tmp from @t where 1 =2
declare dd cursor for select t1,t2,t3 from @t
OPEN dd
FETCH dd into @t1,@t2,@t3
WHILE @@FETCH_STATUS = 0
BEGIN
while len(@t1) > 0
begin
insert #tmp select 't1',left(@t1,2)
set @t1 = right(@t1,len(@t1) - 2)
end
while len(@t2) > 0
begin
insert #tmp select 't2',left(@t2,2)
set @t2 = right(@t2,len(@t2) - 2)
end
while len(@t3) > 0
begin
insert #tmp select 't3',left(@t3,2)
set @t3 = right(@t3,len(@t3) - 2)
end
FETCH dd into @t1,@t2,@t3
END
CLOSE dd
DEALLOCATE dd

select * from #tmp
select t1 as 题号,t2 as 选项,count(1) as 人数 from #tmp group by t1,t2 order by t1,t2
drop table #tmp

/*

题号 选项 人数
------ ------ -----------
t1 01 2
t1 03 1
t1 04 2
t1 05 1
t2 03 1
t2 04 1
t2 05 1
t3 01 1
t3 02 1
t3 04 1
t3 05 2

(所影响的行数为 11 行)
*/

34,575

社区成员

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

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