我有一些存储过程需要针对数据库的讨厌野兽编写。我需要遍历一个表(应用程序)并使用应用程序表中的 application_id 从其他表中提取值(有些是 aggerate / averages /etc 值)。
到目前为止,我有:
declare @id INT
declare app cursor for
SELECT application_id from application
OPEN app
FETCH NEXT FROM app
INTO @id
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT a.NAME_LAST, a.NAME_FIRST, ca.status, (SELECT AVG(score) FROM reviews WHERE application_id = @id), (SELECT count(*) FROM reviews WHERE application_id = @id) FROM application a, committee_applications ca WHERE a.application_id = ca.application_id AND a.application_id = @id
FETCH NEXT FROM app INTO @id
END
CLOSE app
DEALLOCATE app
这给了我想要的结果,但我确信有一种更清洁的方法可以做到这一点,而且我今天似乎无法做出精神上的跳跃来正确地做到这一点。有人可以指出一个更好的方法,因为这对我来说真的很难看。
此外,似乎我应该将这些值存储到临时表中,然后返回完整结果,而不是一一运行 SELECT 语句。
任何建议将不胜感激。
谢谢。