要求是:
现在做一个调查报告,都是选择题而且是单选。
有五个答案,答案的值分别是 1,2,3,4,5
但是存到数据库的话,可能1是没有的,我在做报表的时候又要把1给列出来。
例如:
题目   答案  人数
1       1      2
1       2      3
1       3      4
1       4      5现在出来的是这样的格式,
想要的是:
题目   答案  人数
1       1      2
1       2      3
1       3      4
1       4      5
1       5      0就是在数据库没5的记录,但是要把它列出来,显示为0。

解决方案 »

  1.   


    select * from (
    select * from tb
    union all
    select 1,5,0)t
      

  2.   

    -------------------------------------------
    --  Author : liangCK 小梁
    --  Comment: 小梁 爱 兰儿
    --  Date   : 2009-09-08 10:46:23
    -------------------------------------------
     
    --> 生成测试数据: @T
    DECLARE @T TABLE (题目 INT,答案 INT,人数 INT)
    INSERT INTO @T
    SELECT 1,1,2 UNION ALL
    SELECT 1,2,3 UNION ALL
    SELECT 1,3,4 UNION ALL
    SELECT 1,4,5--SQL查询如下:SELECT A.题目,B.答案,ISNULL(C.人数,0) AS 人数
    FROM (SELECT DISTINCT 题目 FROM @T) AS A
       CROSS JOIN (SELECT 答案 = 1 UNION ALL SELECT 2 UNION ALL SELECT 3
                   UNION ALL SELECT 4 UNION ALL SELECT 5) AS B
    LEFT JOIN @T AS C
        ON A.题目= C.题目 AND B.答案 = C.答案/*
    题目          答案          人数
    ----------- ----------- -----------
    1           1           2
    1           2           3
    1           3           4
    1           4           5
    1           5           0(5 row(s) affected)
    */
      

  3.   

    -------------------------------------------
    --  Author : liangCK 小梁
    --  Comment: 小梁 爱 兰儿
    --  Date   : 2009-09-08 10:46:23
    -------------------------------------------
     
    --> 生成测试数据: @T
    DECLARE @T TABLE (题目 INT,答案 INT,人数 INT)
    INSERT INTO @T
    SELECT 1,1,2 UNION ALL
    SELECT 1,2,3 UNION ALL
    SELECT 1,3,4 UNION ALL
    SELECT 1,4,5 UNION ALLSELECT 2,1,3 UNION ALL
    SELECT 2,4,2--SQL查询如下:SELECT A.题目,B.答案,ISNULL(C.人数,0) AS 人数
    FROM (SELECT DISTINCT 题目 FROM @T) AS A
       CROSS JOIN (SELECT 答案 = 1 UNION ALL SELECT 2 UNION ALL SELECT 3
                   UNION ALL SELECT 4 UNION ALL SELECT 5) AS B
    LEFT JOIN @T AS C
        ON A.题目= C.题目 AND B.答案 = C.答案/*
    题目          答案          人数
    ----------- ----------- -----------
    1           1           2
    1           2           3
    1           3           4
    1           4           5
    1           5           0
    2           1           3
    2           2           0
    2           3           0
    2           4           2
    2           5           0(10 row(s) affected)
    */
      

  4.   

    DECLARE @T TABLE (题目 INT,答案 INT,人数 INT)
    INSERT INTO @T
    SELECT 1,1,2 UNION ALL
    SELECT 1,2,3 UNION ALL
    SELECT 1,3,4 UNION ALL
    SELECT 1,4,5select 题目,答案,(sum(答案)+sum(题目)) as 人数 
     from @T group by 题目,答案
    题目          答案          人数
    ----------- ----------- -----------
    1           1           2
    1           2           3
    1           3           4
    1           4           5(4 行受影响)