有3张表 a ,b ,c
a表是用户表。   有 name (姓名) 
                    int(积分默认为一百)两列。
b表是提出问题表。 有  id(问题id) 
                       name(用户姓名)
                       question(问题名称)
            int(提问给的分数)
            isok(是否解决 '0' 代表解决中,‘1' 代表已解决)
c表是回答问题表。 有 id(回答id)
                       questionid(问题id)
                       answer(回答内容)
                       name(用户姓名)
现在我需要根据用户名来取出 
   1.总分:  2.回答得分: 3.悬赏付出: 4.处罚: 5. 回答总数:  6.回答被采纳: 7.回答被采纳率: 8.提问总数:  9.已解决的问题数: 10.解决中的问题数:  
用一条存储过程来写出.
如何做到。
现在还有个问题,有个处罚.我在那个表中加处罚列合适.
非常感谢!

解决方案 »

  1.   


    create table #Users
    (
        name varchar(10),
        jf   int not null default 100
    )
    go
    create table #Questions
    (
        q_id  int,
        name varchar(10),
        question varchar(100),
        score  int,
        isok  bit not null default 0
    )
    go
    create table #Answers
    (
        s_id  int,
        q_id  int,
        answer varchar(100),
        name  varchar(10)
    )
    go
    select u.name,--姓名
           (u.jf+2*a.a_count-q.score) jf, --总分
           (2*a.a_count) a_score, --回答得分
            a.a_count, --回答总数
            q.q_count, --提问总数
            q.solved_count, --已解决问题数
            (q.q_count-q.solved_count) ongoing_count, --解决中的问题数
    from #Users u join(select name,count(*) a_count
         from #Answers
         group by name) a on u.name=a.name
        join(select name,
           sum(score) score,
           sum(cast(isok as int)) solved_count,
           count(*) q_count
        from #Questions
        group by name)q on u.name=q.name
    go
    drop table #Users,#Questions,#Answers至于“3.悬赏付出: 4.处罚: 6.回答被采纳: 7.回答被采纳率:”不能做出来。
    因为:
       1、没有关于“悬赏、处罚”的信息
       2、没有“是否被采纳”的信息
      

  2.   

    悬赏付出那就是我所说的q_score。其余的比如“4.处罚: 6.回答被采纳: 7.回答被采纳率”还是不能算出,因为不能知道某个答案是否被采纳了,另外,也没有与“处罚”相关的资料。
      

  3.   

    各位帮帮忙 ,今天必须交!
    现在在 用户表中加力一个处罚列!
    在回答表中有一列isover (0代表没有被采纳,1代表被采纳)
    浑身冒汗!!!!
      

  4.   

    总结题目如下:
    有3张表 a ,b ,c
    a表是用户表。   有 name (姓名) 
                        int(积分默认为一百)。
                           chufa(被处罚的分数)
    b表是提出问题表。 有  id(问题id) 
                           name(用户姓名)
                           question(问题名称)
                int(提问给的分数)
                isok(是否解决 '0' 代表解决中,‘1' 代表已解决)
    c表是回答问题表。 有 id(回答id)
                           questionid(问题id)
                           answer(回答内容)
                           name(用户姓名)
                           isaccp(是否为采纳答案)
    现在需要根据用户名来取出 
       1.总分:  2.回答得分: 3.悬赏付出: 4.处罚: 5. 回答总数:  6.回答被采纳: 7.回答被采纳率: 8.提问总数:  9.已解决的问题数: 10.解决中的问题数:  
    用一条存储过程来写出.
    =====================================
    1.总分 即a.int
    2.回答得分 即c表中某个用户的回答总数*2,加上被采纳的回答的奖励分数
    3.悬赏付出 即b表中某用户的悬赏总分
    4.处罚 即a.chufa
    5.回答总数 即c表中某用户的回答总数
    6.回答被采纳 即c表中某用户的被采纳回答数
    不写了,累
      

  5.   

    create   table   #Users 

            name   varchar(10), 
            jf       int   not   null   default   100 

    go 
    create   table   #Questions 

            q_id     int, 
            name   varchar(10), 
            question   varchar(100), 
            score     int, 
            isok     bit   not   null   default   0 

    go 
    create   table   #Answers 

            s_id     int, 
            q_id     int, 
            answer   varchar(100), 
            name     varchar(10) 

    go 
    select   u.name,--姓名 
                  (u.jf+2*a.a_count-q.score)   jf,   --总分 
                  (2*a.a_count)   a_score,   --回答得分 
                    a.a_count,   --回答总数 free web hosting
                    q.q_count,   --提问总数 
                    q.solved_count,   --已解决问题数 
                    (q.q_count-q.solved_count)   ongoing_count,   --解决中的问题数 
    from   #Users   u   join(select   name,count(*)   a_count 
              from   #Answers 
              group   by   name)   a   on   u.name=a.name 
            join(select   name, 
                  sum(score)   score, 
                  sum(cast(isok   as   int))   solved_count, 
                  count(*)   q_count 
            from   #Questions 
            group   by   name)q   on   u.name=q.name 
    go 
    drop   table   #Users,#Questions,#Answers 
      

  6.   

    学会存储过程的最好方法是
    看SQL联机帮助~!