求一个调查结果统计的SQL,百分感谢

denghan 2006-09-06 04:32:31
数据结构如下:
题目表 TITLES
--------------
序号 TITLEID(主键)
调查编号 RID
名称 TITLENAME


选项表 ANSWERS
----------------
项号 ANSWERID(主键)
题号 TITLEID
调查编号 RID
项名 ANSWERNAME
项值 ANSWERVALUE


用户回答表 CANSWERS
------------------
序号 ID(主键)
用户号 USERID
题号 TITLEID
选项号 ANSWERID
选项值 ANSWERVALUE
其它值 OTHERVALUE

N道题,每道题有若干个选项,用户对于调查表,可多选,不选。各选项值为 ABCD...
选项值 ANSWERVALUE字段直接保存用户的一个选择,若用户多选,则有多条记录
数据库:Oracle9i + Win2K_Serv

现在求一个统计调查结果的SQL语句,返回记录集格式如下:
题号,题目 ,选项值,该选值用户数
---------------------------------
1 问题一 A 10
1 问题一 B 12
2 问题二 A 0
2 问题二 B 25
2 问题二 C 8
......

请大侠们帮忙。百分感谢!
...全文
198 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wiler 2006-09-06
  • 打赏
  • 举报
回复
前面的错了,应该用左连接
SELECT A.TITLEID,A.TITLENAME,B.ANSWERVALUE,COUNT(DISTINCT B.USERID)
from TITLES A,CANSWERS B
WHERE A.TITLEID = B.TITLEID(+)
GROUP BY A.TITLEID,A.TITLENAME,B.ANSWERVALUE
ORDER BY A.TITLEID,A.TITLENAME,B.ANSWERVALUE
denghan 2006-09-06
  • 打赏
  • 举报
回复
直接关联不行吧,如果某选项没有用户选过,它不会出现,而需要它占一行,并显示0
wiler 2006-09-06
  • 打赏
  • 举报
回复
SELECT A.TITLEID,A.TITLENAME,B.ANSWERVALUE,COUNT(DISTINCT B.USERID)
from TITLES A,CANSWERS B
WHERE A.TITLEID = B.TITLEID
GROUP BY A.TITLEID,A.TITLENAME,B.ANSWERVALUE
ORDER BY A.TITLEID,A.TITLENAME,B.ANSWERVALUE
子陌红尘 2006-09-06
  • 打赏
  • 举报
回复
select
t.TITLEID as 题号,
t.TITLENAME as 题目,
a.ANSWERVALUE as 选项值,
NVL(count(c.ID),0) as 该选值用户数
from
TITLES t
inner join
ANSWERS a
on
t.TITLEID=a.TITLEID
left join
CANSWERS c
on
a.TITLEID=c.TITLEID and a.ANSWERID=c.ANSWERID
group by
t.TITLEID,t.TITLENAME,a.ANSWERVALUE
子陌红尘 2006-09-06
  • 打赏
  • 举报
回复
select
t.TITLEID as 题号,
t.TITLENAME as 题目,
a.ANSWERVALUE as 选项值,
NVL(count(c.ID),0) as 该选值用户数
from
TITLES t,
ANSWERS a,
CANSWERS c
where
t.TITLEID=a.TITLEID and a.TITLEID*=c.TITLEID and a.ANSWERID*=c.ANSWERID
group by
t.TITLEID,t.TITLENAME,a.ANSWERVALUE
louzg 2006-09-06
  • 打赏
  • 举报
回复
lz测试一下
louzg 2006-09-06
  • 打赏
  • 举报
回复
SELECT A.TITLEID,A.TITLENAME,C.ANSWERVALUE,COUNT(DISTINCT USERID)
from TITLES A,ANSWERS B,CANSWERS C
WHERE A.TITLEID = B.TITLEID AND B.ANSWERID = C.ANSWERID
GROUP BY A.TITLEID,A.TITLENAME,C.ANSWERVALUE
ORDER BY A.TITLEID,A.TITLENAME,C.ANSWERVALUE;

我觉得直接关联就可以了
denghan 2006-09-06
  • 打赏
  • 举报
回复
UP一下。大侠们已经下班了?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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