有个调查问卷10题选择题(单选)
每题5个选项,分值从1到5.
比如,第一题分值1的没有人选,出来的格式也就成了
题目          选项     人数
学习很辛苦     2         4 
学习很辛苦     3         2
学习很辛苦     4         2
学习很辛苦     5         2分数为1的也要提取出来
题目          选项     人数
学习很辛苦     1         0 
学习很辛苦     2         4 
学习很辛苦     3         2
学习很辛苦     4         2
学习很辛苦     5         2

解决方案 »

  1.   

    select
      选项,isnull(count(1),0) as 人数
    from
      tb
    group by
      选项
      

  2.   

    select a.*
    from ta a
    right join (select 1 as 选项 union all select 2 union select 3 union select 4 union select 5) b
    on a.选项 = b.选项
      

  3.   

    if object_id('[TB]') is not null drop table [TB]
    create table [TB]([题目] varchar(10),[选项] int,[人数] int)
    insert [TB]
    select '学习很辛苦',2,4 union all
    select '学习很辛苦',3,2 union all
    select '学习很辛苦',4,2 union all
    select '学习很辛苦',5,2select 题目=isnull(题目,'学习很辛苦'),
    选项=isnull(选项,number),
    人数=isnull(人数,0)  
    from [TB] right join spt_values on 选项=number where number<6 and type='p' and number>0 /*
    题目         选项          人数          
    ---------- ----------- ----------- 
    学习很辛苦      1           0
    学习很辛苦      2           4
    学习很辛苦      3           2
    学习很辛苦      4           2
    学习很辛苦      5           2(所影响的行数为 5 行)*/drop table [TB]
      

  4.   

    happyflystone的方法只能列出所有题目中没有选的
      

  5.   

    create table tb(题目 int,选项 int)
    insert into tb values(1,2)
    insert into tb values(1,3)
    insert into tb values(1,4)
    insert into tb values(1,5)
    insert into tb values(2,3)
    insert into tb values(2,4)
    insert into tb values(2,5)
    goselect t1.* , isnull(t2.人数,0) 人数 from
    (
    select m.题目 , n.选项 from
    (select distinct 题目 from tb)m,
    (select 1 选项 union all select 2 union all select 3 union all select 4 union all select 5) n
    ) t1 left join
    (
      select 题目 , 选项 , count(1) 人数 from tb group by 题目 , 选项
    ) t2
    on t1.题目 = t2.题目 and t1.选项 = t2.选项     
    order by t1.题目 ,t1.选项drop table tb
    /*题目          选项          人数          
    ----------- ----------- ----------- 
    1           1           0
    1           2           1
    1           3           1
    1           4           1
    1           5           1
    2           1           0
    2           2           0
    2           3           1
    2           4           1
    2           5           1(所影响的行数为 10 行)
    */
      

  6.   

    建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。