日期:2014-05-19  浏览次数:20499 次

求一存储过程。。。给点意见也好
有两个表,一个表存储了所有的ID(比如学号),另一个表存储该ID的记录,
比如:
表   A:
学号   姓名
A       AAA
B       BBB
C       CCC


表B
学号     事件     日期
A         值班       2007/05/06
A         值班       2007/05/10


求一存储过程输出:

学号   姓名   值班次数
A       AAA         2
B       BBB         0
C       CCC         0

如何在存储过程中实现,本人刚接触存储过程,以前都是在程序中循环写的,太乱,请
各位赐教呢。。。

------解决方案--------------------
SELECT A.[学号],A.[姓名],ISNULL(B.[值班次数],0)
FROM 表A AS A
LEFT OUTER JOIN
(SELECT [学号],COUNT(1) AS [值班次数] FROM 表B GROUP BY [学号])
AS B ON B.[学号]=A.[学号]

存储过程中放这样一条语句就可以,或者直接使用这样一条语句就ok。

------解决方案--------------------
select m.*,count(n.a) from t m left join t1 n on m.a=n.a group by m.a,m.b
a b
---- ---------- -----------
A AAA 2
B BBB 0
C CCC 0

(所影响的行数为 3 行)
------解决方案--------------------
select A.*,值班次数=(select count(1) from B where B.学号=A.学号) from A

学号 姓名 值班次数
---------- ---------- -----------
A AAA 2
B BBB 0
C CCC 0
------解决方案--------------------
先建一张表 然后在存储过程中用上面几位的语句将结果插入到预先已经建立好的表中 在存储过程最后用select语句将结果集读出 EXEC PROC就可以了
------解决方案--------------------
CREATE PROCEDURE XX
AS
BEGIN
SELECT A.*,值班次数=
(SELECT
COUNT(1)
FROM
B
WHERE
B.学号=A.学号
)
FROM A
END
GO

EXECUTE XX
------解决方案--------------------
SELECT A.学号,A.姓名,B.值班次数 FROM 表A A
LEFT JOIN
(
SELECT 学号,count(*) as 值班次数 from 表B group by 学号
) B
ON A.学号 = B.学号