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个人选择了此项)  不知我描述得清楚不?请高人给予解答一下啊

解决方案 »

  1.   

    group by 吧。怎么都没人回答你呢?select AID,BID,count(*) as Num  from C
    group by AID,BID
      

  2.   

    这个按照你现在的表的状态是统计不出来的你设计的表有问题 选项表要么加个选择人数字段num.每次有人选择相应题目ID的某个选项ID的时候就num=num+1;这样就直接取出来就行了。。
      

  3.   

    C表示用处是什么呢?
    按照我的理解 只需查询 c表就可以吧
    select * from c where  AID ='' and CID=BID
      

  4.   

    原来有个选择C表啊。。我还以为是标准答案C表。。看错了 不过还是B表中插入num字段好点。。每次插入C表一条数据就顺带更新一下B表的数据num+1,就OK了。。省的你去写count什么的 也直观
      

  5.   


    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试试看,有语法错误自己改下
      

  6.   


      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)
      

  7.   

    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
      

  8.   

    select AID,Bid,COUNT(*) as Num from A left join C on A.AID = C.AID group by BID
    希望有用~
      

  9.   

     真是人多力量大啊,一会儿的功夫,就有这么多热心的高人相助,真是太感谢了。  我马上去试试各位的SQL,后面的几位的回复很好,因为我确实不只是需要ID,我更需要的是如A表中的:题内容,B表中的选项Title,然后才跟C表中的选择数量合在一起的结果。
      

  10.   

    select fbtID,OpID,count(OpID) as Num from SurVeyReply 
    group by fbtID,Opid
    二楼的这一句是对的。但是我想要的结果是:
      a.title,b.title,count(c.opid)这样的,我怎么试都不行呢? 
     有什么好办法吗?
      

  11.   

    要显示,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联机丛书里面应该都有例子。
      

  12.   

    你试一下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
    如果不行 你可以自己调整下。。大概是这个意思
      

  13.   

    我怕你调不出来 我帮你调吧 逻辑是对的我用以前我的投票表给你做了示范下面的你只要把字段和表改一下就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 这样排一下 因为我在做查询的时候数据发现数据出来了 可是有点乱