0

这是学生图书馆项目的一部分。

有 2 个表:alertsborrows

borrows包含studentID,bookIDdate of borrowing.

alerts指示哪个学生逾期了多少本书。

该代码应该为每个过期的学生插入一行,并计算有多少本书过期。

Est_Return_Date = return_date + 30

insert into dbo.Alert (studentID, AlertCount)
    values ((select distinct (studentID )from dbo.Borrows
        where Est_Return_Date < GETDATE()
        and return_date is null),
        (select count( studentID) from dbo.Borrows
        where Est_Return_Date < GETDATE()
        and return_date is null ))
4

2 回答 2

2

您将想要使用GROUP BY而不是子查询,您想要的是每个 studentId 的结果,这样GROUP BY以及COUNT带有警报的行;

INSERT INTO dbo.Alert (studentID, AlertCount)
SELECT studentID,COUNT(*)
FROM dbo.Borrows
WHERE Est_Return_Date < GETDATE()
AND return_date is NULL
GROUP BY studentID;

演示在这里

于 2012-08-25T14:14:08.077 回答
1

试试这个

 insert into dbo.Alert (studentID, AlertCount)
select studentId, count(*) as AlertCount from dbo.Borrows  where Est_Return_Date < GETDATE()
        and return_date is null group by studentId

考虑到您想要做什么,您的查询将始终插入 1 个值 - 计数返回学生总数,可能您的另一个选择也只返回一个值。此查询将按学生分组,并在过期时统计另一张表的总书籍

在此处阅读有关 group by 的内容。如果是 MySQL 也可以。另一个页面,有一个例子,在这里

于 2012-08-25T14:06:13.837 回答