SQL SERVER 创建存储过程中指定时间段内图书的借阅、零售数量
时间: 2024-02-18 14:04:56 浏览: 67
可以使用以下代码创建一个存储过程,获取指定时间段内图书的借阅和零售数量:
```
CREATE PROCEDURE GetBookStatistics
@StartDate DATE,
@EndDate DATE
AS
BEGIN
SELECT
b.BookID,
b.BookName,
SUM(CASE WHEN t.TransactionType = 'Borrow' THEN 1 ELSE 0 END) AS BorrowCount,
SUM(CASE WHEN t.TransactionType = 'Retail' THEN 1 ELSE 0 END) AS RetailCount
FROM
Books b
LEFT JOIN Transactions t ON b.BookID = t.BookID
WHERE
t.TransactionDate BETWEEN @StartDate AND @EndDate
GROUP BY
b.BookID, b.BookName
END
```
在上述代码中,我们使用了 `SUM` 函数和 `CASE` 表达式来计算借阅和零售数量。使用 `LEFT JOIN` 语句来保证即使图书没有发生过借阅或零售交易,也会出现在结果集中。最后,通过 `GROUP BY` 子句对每本书进行分组,得到每本书在指定时间段内的借阅和零售数量。
相关问题
SQL SERVER 创建存储过程统计指定客户借阅、购买书籍的情况、数量
您可以使用以下 SQL Server 存储过程查询指定客户借阅、购买书籍的情况和数量:
```
CREATE PROCEDURE GetCustomerBookStats
@CustomerId INT
AS
BEGIN
-- 获取指定客户借阅的书籍情况和数量
SELECT
'Borrowed' AS [Type],
b.BookName,
COUNT(*) AS [Count]
FROM
BorrowedBooks bb
INNER JOIN Books b ON bb.BookId = b.BookId
WHERE
bb.CustomerId = @CustomerId
GROUP BY
b.BookName
UNION
-- 获取指定客户购买的书籍情况和数量
SELECT
'Purchased' AS [Type],
p.BookName,
COUNT(*) AS [Count]
FROM
PurchasedBooks pb
INNER JOIN Purchases p ON pb.PurchaseId = p.PurchaseId
WHERE
pb.CustomerId = @CustomerId
GROUP BY
p.BookName
END
```
该存储过程接受一个 `@CustomerId` 参数,用于指定客户的 ID。首先,它会查询 `BorrowedBooks` 和 `Books` 表,获取指定客户借阅的书籍情况和数量,并使用 `UNION` 运算符将其与下一个查询结果合并。接着,它会查询 `PurchasedBooks` 和 `Purchases` 表,获取指定客户购买的书籍情况和数量。最后,它会返回一个结果集,包含两个列:`Type` 和 `Count`。`Type` 列表示书籍的类型(借阅或购买),`Count` 列表示该类型的书籍数量。
SQL SERVER创建存储过程查询指定学生的成绩单
好的,以下是 SQL SERVER 创建存储过程查询指定学生的成绩单的代码:
```sql
CREATE PROCEDURE get_student_grades
@student_id INT
AS
BEGIN
SELECT subject_name, grade
FROM grades
WHERE student_id = @student_id
END
```
在上述代码中,我们首先创建了一个名为 "get_student_grades" 的存储过程,该过程接受一个输入参数 "@student_id",类型为 INT。然后在过程内部,我们使用 SELECT 语句查询 "grades" 表中指定学生的成绩单,并将查询结果返回。在 WHERE 子句中,我们使用输入参数 "@student_id" 来过滤查询结果,以筛选出指定学生的成绩单。
要调用这个存储过程,你可以使用以下语句:
```sql
EXEC get_student_grades @student_id = 12345
```
其中,@student_id = 12345 表示输入参数的值为 12345,即查询学号为 12345 的学生的成绩单。
阅读全文