Sql学得不好呀,紧急求解一条Sql语句!!!

YangYun 2012-03-30 10:45:45
Sql语句始终学得不对劲,只会一些常规的简单操作,一旦复杂了就不知所措了,现在就遇到一个对我来说太复杂的Sql语句
具体情况如下:
我有三张表,一个是考题A表,一个是答案选项B表,一个是回答选择C表。
A:
AID,Title (题号ID,题内容)
B:
BID,AID,Title (选项ID,题号ID,选项描述)
C:
CID,AID,BID (回答ID,题ID,选项ID)

我的问题是,我想得到各题中各选项有多少人选择。
我要的结果如下:

AID,Bid,Num (第AID题的BID选项有Num个人选择了此项)

不知我描述得清楚不?请高人给予解答一下啊
...全文
268 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
joeandlily 2012-03-30
  • 打赏
  • 举报
回复
外面再套一层SQL语句
YangYun 2012-03-30
  • 打赏
  • 举报
回复
select fbtID,OpID,count(OpID) as Num from SurVeyReply
group by fbtID,Opid
二楼的这一句是对的。但是我想要的结果是:
a.title,b.title,count(c.opid)这样的,我怎么试都不行呢?
有什么好办法吗?
YangYun 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
原来有个选择C表啊。。我还以为是标准答案C表。。看错了 不过还是B表中插入num字段好点。。每次插入C表一条数据就顺带更新一下B表的数据num+1,就OK了。。省的你去写count什么的 也直观
[/Quote]
你说的不错,但我这里不只是想统计一个这个数量,还有其它,因此没办法放到B表里一个字段
YangYun 2012-03-30
  • 打赏
  • 举报
回复
真是人多力量大啊,一会儿的功夫,就有这么多热心的高人相助,真是太感谢了。

我马上去试试各位的SQL,后面的几位的回复很好,因为我确实不只是需要ID,我更需要的是如A表中的:题内容,B表中的选项Title,然后才跟C表中的选择数量合在一起的结果。
小小农民 2012-03-30
  • 打赏
  • 举报
回复
select AID,Bid,COUNT(*) as Num from A left join C on A.AID = C.AID group by BID
希望有用~
lamasia1987 2012-03-30
  • 打赏
  • 举报
回复
2楼是对的 如果你要A,B表的其他字段就就join一下
select a.aid,b.bid,count(c.cid) cnt
from a
inner join b on
b.aid=a.aid
inner join c on
c.bid=b.bid
group by
a.aid,b.bid
覃祖甘 2012-03-30
  • 打赏
  • 举报
回复

A:
AID,Title (题号ID,题内容)
B:
BID,AID,Title (选项ID,题号ID,选项描述)
C:
CID,AID,BID (回答ID,题ID,选项ID)
要取得C表中选择各题的数量,用如下SQL即可解决:
SELECT a.AID,b.Bid,Count(C.CID) Num FROM C c WHERE c.AID in(SELECT B.AID FROM B b, C c WHERE a.AID=b.AID)

Rock870210 2012-03-30
  • 打赏
  • 举报
回复

select (select a.Title from A a where a.AID=b.BID) as question,b.Title as answer,(select sum(c.CID) from C c where c.BID=b.BID) as count
from B b

试试看,有语法错误自己改下
tiangong789 2012-03-30
  • 打赏
  • 举报
回复
原来有个选择C表啊。。我还以为是标准答案C表。。看错了 不过还是B表中插入num字段好点。。每次插入C表一条数据就顺带更新一下B表的数据num+1,就OK了。。省的你去写count什么的 也直观
fengxingxiake 2012-03-30
  • 打赏
  • 举报
回复
C表示用处是什么呢?
按照我的理解 只需查询 c表就可以吧
select * from c where AID ='' and CID=BID
tiangong789 2012-03-30
  • 打赏
  • 举报
回复
这个按照你现在的表的状态是统计不出来的你设计的表有问题 选项表要么加个选择人数字段num.每次有人选择相应题目ID的某个选项ID的时候就num=num+1;这样就直接取出来就行了。。
干巴猴儿 2012-03-30
  • 打赏
  • 举报
回复
group by 吧。怎么都没人回答你呢?

select AID,BID,count(*) as Num from C
group by AID,BID

YangYun 2012-03-30
  • 打赏
  • 举报
回复
高人快出现啊!!!
tiangong789 2012-03-30
  • 打赏
  • 举报
回复
我怕你调不出来 我帮你调吧 逻辑是对的我用以前我的投票表给你做了示范下面的你只要把字段和表改一下就OK了。。
select ab.atitle,ab.btitle,count(c.ID) as num from(select a.ID as aid,b.ID as bid, a.VoteTitle as atitle ,b.VoteAnswer as btitle from VoteEvent as a left join VoteOption as b on a.ID=b.VoteID group BY a.ID,b.ID,a.VoteTitle,b.VoteAnswer )as ab left join VoteDetail as c on c.VoteOpID=ab.bid group by ab.atitle,ab.btitle
语句结尾可以写个order by ab.atitle 这样排一下 因为我在做查询的时候数据发现数据出来了 可是有点乱
tiangong789 2012-03-30
  • 打赏
  • 举报
回复
你试一下select ab.atitle,ab.btitle,c.count(*) as num from(select a.ID as aid,b.ID as bid a.title as atitle ,b.title as btitle from a left join b on a.ID=b.AID group BY a.ID )as ab left join c on c.bid=ab.bid group by ab.atitle,ab.btitle
如果不行 你可以自己调整下。。大概是这个意思
干巴猴儿 2012-03-30
  • 打赏
  • 举报
回复
要显示,a.title,b.title,需要inner join A表和B表
inner join A on A.AID=C.AID
inner join B on B.BID=C.BID

另外使用Group by时的要求就是,除了聚合函数,select中的字段必须出现在group by中。
意思就是要select a.title,b.title 就必须group by a.title,b.title

完整的句子你自己可以试着拼一下。SQL Server联机丛书里面应该都有例子。

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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