这是学生图书馆项目的一部分。
共有2个表:alerts
和borrows
。
borrows
包含studentID
,bookID
和date 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 ))
答案 0 :(得分: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;
演示here。
答案 1 :(得分: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个值 - 计数返回学生总数,可能你的另一个选择也只返回一个值。此查询将按学生分组,并在逾期时计算另一个表的总书数