求一个存储过程的写法。
   有两张表:
       表一:试题信息表(subjectinfo)  字段:subjectid[试题的ID],content[试题内容],state[试题状态0-待审核 1-未通过审核 2-已通过审核],date[试题的发布日期],name[试题的命题人]
      表二:报名信息表(signinfo)   字段:ID(报名ID),subjectid[所选试题的ID],name[报名者姓名]
         我想写一个存储过程,输入参数是@name[试题的命题人],查询结果是:试题内容,试题的发布日期,试题的状态,试题的报名人数
  请问该怎么写这个存储过程啊?注意:state字段的取值有int型(0,1,2)  但是我想让查询结果显示汉字(待审核,未通过,已通过审核) 

解决方案 »

  1.   

          表一:试题信息表(subjectinfo)  字段:subjectid[试题的ID],content[试题内容],state[试题状态0-待审核 1-未通过审核 2-已通过审核],date[试题的发布日期],name[试题的命题人] 
          表二:报名信息表(signinfo)  字段:ID(报名ID),subjectid[所选试题的ID],name[报名者姓名] 
            我想写一个存储过程,输入参数是@name[试题的命题人],查询结果是:试题内容,试题的发布日期,试题的状态,试题的报名人数 
      请问该怎么写这个存储过程啊?注意:state字段的取值有int型(0,1,2)  但是我想让查询结果显示汉字(待审核,未通过,已通过审核) 
    SELECT B.content,B.date, CASE B.state WHEN '0' THEN '待审核' WHEN '1' THEN '未通过审核' WHEN '2' THEN '已通过审核'END B.COUNT(*) FROM  signinfo  A  INNER JOIN subjectinfo B A.subjectid = B.subjectid
     WHERE B.name = "参数"
      

  2.   


    SELECT B.content,B.date, CASE B.state WHEN '0' THEN '待审核' WHEN '1' THEN '未通过审核' WHEN '2' THEN '已通过审核'END A.COUNT(*) FROM  signinfo  A  INNER JOIN subjectinfo B A.subjectid = B.subjectid
     WHERE B.name = "参数"
    这个! 上面错了.
      

  3.   

    select *,
    (case a.state when 0 then '待审核'
     when 1 then '未通过'
    else '已通过审核' end) as status
     from subjectinfo a inner join signinfo b on a.subjectid=b.subjectid where b.name=@name
      

  4.   


    select b.content,b.date,case b.state when '0' then '待审核' when '1' then '未通过审核' else '已通过审核' end state ,a.count(ID) from signinfo a
    left join subjectinfo b on a.subjectid=b.subjectid
    where b.name=@name
      

  5.   

    select b.content,b.date,case b.state when '0' then '待审核' when '1' then '未通过审核' else '已通过审核' end state ,a.count(ID) from signinfo a 
    left join subjectinfo b on a.subjectid=b.subjectid 
    where b.name=@name我按上面的方法编译到通过了,可是当执行存储过程时出现错误,
       消息 4121,级别 16,状态 1,过程 p_looksignup,第 5 行
       找不到列 "a" 或用户定义的函数或聚合 "a.count",或者名称不明确。

      (1 行受影响)
    请问是什么原因啊?
      

  6.   

    SELECT B.content,B.date, CASE B.state WHEN '0' THEN '待审核' WHEN '1' THEN '未通过审核' WHEN '2' THEN '已通过审核'END as state  ,
     (select Count(*) from signinfo  ) as count FROM  signinfo  A  INNER JOIN subjectinfo B A.subjectid = B.subjectid
     WHERE B.name = "参数"
      

  7.   

    select b.content,b.date,case b.state when '0' then '待审核' when '1' then '未通过审核' else '已通过审核' end state ,a.count(ID) from signinfo a 
    left join subjectinfo b on a.subjectid=b.subjectid 
    where b.name=@name 
    group by a.ID
      

  8.   

    SELECT B.content,B.date, CASE B.state WHEN '0' THEN '待审核' WHEN '1' THEN '未通过审核' WHEN '2' THEN '已通过审核'END as state  , 
    (select Count(*) FROM  signinfo  A  INNER JOIN subjectinfo B A.subjectid = B.subjectid 
    ) as count FROM  signinfo  A  INNER JOIN subjectinfo B A.subjectid = B.subjectid 
    WHERE B.name = "参数" 
    应该是这样的,如果用select Count(*) from signinfo的话将把表signinfo中全部的记录数取出,我按上面的那样成功了,很感谢你让我产生了灵感!!呵呵 
      

  9.   

    哎!!我还以为  SELECT B.content,B.date, CASE B.state WHEN '0' THEN '待审核' WHEN '1' THEN '未通过审核' WHEN '2' THEN '已通过审核'END as state  , 
    (select Count(*) FROM  signinfo  A  INNER JOIN subjectinfo B A.subjectid = B.subjectid 
    ) as count FROM  signinfo  A  INNER JOIN subjectinfo B A.subjectid = B.subjectid 
    WHERE B.name = "参数"   这样做就问题解决了呢,没想到又冒出了一个新问题:如果某个试题的报名人数有n个,那么查询结果将出现n条完全相同的记录,真是烦死人了!请问一下该怎样消除这些重复记录啊?哎,本人的SQL学的太乱了!!! 
      

  10.   

    CREATE PROC p @name VARCHAR(20)
    AS
        SELECT
            A.试题内容,
            A.试题的发布日期
             CASE A.试题的状态 
                 WHEN 0 THEN '待审核'
                WHEN 1 THEN '未通过'
               WHEN 2 THEN '已通过审核'
            END AS 试题的状态,
            ISNULL(B.试题的报名人数,0) AS 试题的报名人数
        FROM subjectinfo AS A
            LEFT JOIN
            (
                SELECT subjectid,COUNT(*) AS 试题的报名人数
                  FROM signinfo
                GROUP BY subjectid
            ) AS B
        ON A.subjectid=B.subjectid
        WHERE name=@name;
    GO
      

  11.   

    问题解决了没有、
    我个人认为你应该把state字段 从新建立一个表、这样就可以简化sql 语句。并且满足三级范式、