要求是:
现在做一个调查报告,都是选择题而且是单选。
有五个答案,答案的值分别是 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,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。
select * from (
select * from tb
union all
select 1,5,0)t
-- 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)
*/
-- 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)
*/
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 行受影响)