求一个存储过程的写法。
有两张表:
表一:试题信息表(subjectinfo) 字段:subjectid[试题的ID],content[试题内容],state[试题状态0-待审核 1-未通过审核 2-已通过审核],date[试题的发布日期],name[试题的命题人]
表二:报名信息表(signinfo) 字段:ID(报名ID),subjectid[所选试题的ID],name[报名者姓名]
我想写一个存储过程,输入参数是@name[试题的命题人],查询结果是:试题内容,试题的发布日期,试题的状态,试题的报名人数
请问该怎么写这个存储过程啊?注意:state字段的取值有int型(0,1,2) 但是我想让查询结果显示汉字(待审核,未通过,已通过审核)
有两张表:
表一:试题信息表(subjectinfo) 字段:subjectid[试题的ID],content[试题内容],state[试题状态0-待审核 1-未通过审核 2-已通过审核],date[试题的发布日期],name[试题的命题人]
表二:报名信息表(signinfo) 字段:ID(报名ID),subjectid[所选试题的ID],name[报名者姓名]
我想写一个存储过程,输入参数是@name[试题的命题人],查询结果是:试题内容,试题的发布日期,试题的状态,试题的报名人数
请问该怎么写这个存储过程啊?注意:state字段的取值有int型(0,1,2) 但是我想让查询结果显示汉字(待审核,未通过,已通过审核)
表二:报名信息表(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 = "参数"
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 = "参数"
这个! 上面错了.
(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
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
left join subjectinfo b on a.subjectid=b.subjectid
where b.name=@name我按上面的方法编译到通过了,可是当执行存储过程时出现错误,
消息 4121,级别 16,状态 1,过程 p_looksignup,第 5 行
找不到列 "a" 或用户定义的函数或聚合 "a.count",或者名称不明确。
(1 行受影响)
请问是什么原因啊?
(select Count(*) from signinfo ) as count FROM signinfo A INNER JOIN subjectinfo B A.subjectid = B.subjectid
WHERE B.name = "参数"
left join subjectinfo b on a.subjectid=b.subjectid
where b.name=@name
group by a.ID
(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中全部的记录数取出,我按上面的那样成功了,很感谢你让我产生了灵感!!呵呵
(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学的太乱了!!!
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
我个人认为你应该把state字段 从新建立一个表、这样就可以简化sql 语句。并且满足三级范式、