日期:2014-05-18  浏览次数:20641 次

请教一道统计的SQL题
有这样的一个表:
ID name Index Desc Question answer
1 张三 1 学生调查 是否男生 是

2 张三 1 学生调查 是否团员 是

3 张三 1 学生调查 是否班干部 否

4 张三 1 学生调查 是否内宿 是

5 张三 1 学生调查 是否特长生 否

6 张三 1 学生调查 是否教职工子弟 不详

7 张三 2 家庭调查 是否特困户 否
8 张三 2 家庭调查 是否广州市户口 是


现要统计学生在各次调查中答案为'是'的总数,'否'的总数,'不详'的总数,
0:不详 1:否 2:是  
且按如下排列,请问如何实现,谢谢!

[name] [Desc] [是] [否] [不详]
张三 学生调查 3 2 1
张三 家庭调查 1 1 0


建表:

create table table1
(
[ID] [int] NOT NULL,
[name] [varchar](50),
[index] [int] NOT NULL,
[Desc] [varchar](50),
[Question] [varchar](100),
[answer] [int] NOT NULL
)

INSERT INTO table1([ID],[name],[index],[Desc],[Question],[answer])
VALUES(1,'张三',1,'学生调查','是否男生',2)
INSERT INTO table1([ID],[name],[index],[Desc],[Question],[answer])
VALUES(2,'张三',1,'学生调查','是否团员',2)
INSERT INTO table1([ID],[name],[index],[Desc],[Question],[answer])
VALUES(3,'张三',1,'学生调查','是否班干部',1)
INSERT INTO table1([ID],[name],[index],[Desc],[Question],[answer])
VALUES(4,'张三',1,'学生调查','是否内宿',2)
INSERT INTO table1([ID],[name],[index],[Desc],[Question],[answer])
VALUES(5,'张三',1,'学生调查','是否特长生',1)
INSERT INTO table1([ID],[name],[index],[Desc],[Question],[answer])
VALUES(6,'张三',1,'学生调查','是否教职工子弟',0)
INSERT INTO table1([ID],[name],[index],[Desc],[Question],[answer])
VALUES(7,'张三',2,'家庭调查','是否特困户',1)
INSERT INTO table1([ID],[name],[index],[Desc],[Question],[answer])
VALUES(8,'张三',2,'家庭调查','是否广州市户口',2)

------解决方案--------------------
SQL code

--加多个排序
select 
    name,
    [Desc],
    [是]=sum(case when answer=2 then 1 else 0 end ),
    [否]=sum(case when answer=1 then 1 else 0 end ),
    [不详]=sum(case when answer=0 then 1 else 0 end )
from
 table1    
GROUP BY name,    [Desc]
order by [是] desc