Advertisement
Guest User

Untitled

a guest
Aug 17th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 3.01 KB | None | 0 0
  1. /****** Object:  StoredProcedure  [sp_getStatisticRentbookInMonth]  Script Date: 8/13/2019 ******/
  2. --Trả về thông tin sách thuê theo tháng
  3. CREATE PROCEDURE sp_getStatisticRentbookInMonth (@MONTH SMALLINT)
  4. AS
  5. BEGIN
  6.     DECLARE @book_id VARCHAR(50)
  7.     DECLARE @book_title NVARCHAR(256)
  8.     DECLARE @amount_total INT
  9.     DECLARE @amount_returned INT
  10.     DECLARE @amount_renting INT
  11.     DECLARE @amount_expiration INT
  12.  
  13.     DECLARE @tblStats TABLE
  14.     (
  15.         book_id VARCHAR(50),
  16.         book_title NVARCHAR(256),
  17.         amount_total INT,
  18.         amount_returned INT,
  19.         amount_renting INT,
  20.         amount_expiration INT
  21.     )
  22.     --Tạo con trỏ duyệt từng sách có trong phần thuê sách
  23.     IF (@MONTH != 0) -- Nếu @month khác 0 thì duyệt lấy mã sách thuê theo tháng @month
  24.         DECLARE cs  CURSOR FOR SELECT DISTINCT b.id
  25.         FROM dbo.BOOK b, dbo.RENTBOOK rb, dbo.RENTBOOK_DETAIL dt
  26.         WHERE b.id = dt.book_id AND rb.id = dt.rentbook_id
  27.         AND YEAR(rb.created_date) = YEAR(GETDATE()) AND MONTH(rb.created_date) = @MONTH
  28.     ELSE-- Nếu @month = 0 thì duyệt lấy mã sách thuê trong cả năm
  29.         DECLARE cs  CURSOR FOR SELECT DISTINCT b.id
  30.         FROM dbo.BOOK b, dbo.RENTBOOK rb, dbo.RENTBOOK_DETAIL dt
  31.         WHERE b.id = dt.book_id AND rb.id = dt.rentbook_id
  32.         AND YEAR(rb.created_date) = YEAR(GETDATE())
  33.    
  34.     OPEN cs
  35.     FETCH NEXT FROM cs INTO @book_id
  36.  
  37.     --Tiến hành lặp danh sách sách thuê và insert dữ liệu thống kê vào tblStats
  38.     WHILE @@FETCH_STATUS = 0
  39.     BEGIN
  40.         --Tên sách
  41.         SELECT @book_title = title FROM dbo.BOOK WHERE id = @book_id
  42.  
  43.         --Tổng số lượng đã thuê
  44.         SELECT @amount_total = SUM(dt.amount)
  45.         FROM dbo.BOOK b, dbo.RENTBOOK_DETAIL dt
  46.         WHERE b.id = dt.book_id AND dt.book_id = @book_id
  47.         GROUP BY b.id
  48.  
  49.         --Tổng số sách đã trả
  50.         SELECT @amount_returned = SUM(dt.amount)
  51.         FROM dbo.BOOK b, dbo.RENTBOOK_DETAIL dt, dbo.RENTBOOK rb
  52.         WHERE b.id = dt.book_id
  53.         AND dt.rentbook_id = rb.id
  54.         AND dt.book_id = @book_id
  55.         AND rb.STATUS = 1
  56.         GROUP BY b.id
  57.  
  58.         --Tổng số sách đang còn thuê
  59.         SELECT @amount_renting = SUM(dt.amount)
  60.         FROM dbo.BOOK b, dbo.RENTBOOK_DETAIL dt, dbo.RENTBOOK rb
  61.         WHERE b.id = dt.book_id
  62.         AND dt.rentbook_id = rb.id
  63.         AND dt.book_id = @book_id
  64.         AND rb.STATUS = 0
  65.         GROUP BY b.id
  66.  
  67.         --Tổng số sách đang quá hạn
  68.         SELECT @amount_expiration = SUM(dt.amount)
  69.         FROM dbo.BOOK b, dbo.RENTBOOK_DETAIL dt, dbo.RENTBOOK rb
  70.         WHERE b.id = dt.book_id
  71.         AND dt.rentbook_id = rb.id
  72.         AND dt.book_id = @book_id
  73.         AND rb.STATUS = 0
  74.         AND DATEDIFF(DAY, rb.created_date, GETDATE()) > rb.expiration_day
  75.         GROUP BY b.id
  76.  
  77.         --Thêm các dữ liệu đã thống kê vào bảng tblStats
  78.         INSERT @tblStats( book_id, book_title, amount_total, amount_returned, amount_renting, amount_expiration)
  79.         VALUES  (@book_id, @book_title, @amount_total, @amount_returned, @amount_renting, @amount_expiration)
  80.  
  81.         -- Đi đến dòng tiếp theo
  82.         FETCH NEXT FROM cs INTO @book_id
  83.     END
  84.  
  85.  
  86.     --Đóng con trỏ
  87.     CLOSE cs
  88.     DEALLOCATE cs
  89.  
  90.     SELECT * FROM @tblStats
  91. END
  92. GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement