Advertisement
Guest User

Untitled

a guest
Jan 21st, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 5.19 KB | None | 0 0
  1. Calculates the sum to pay of the specific order
  2. -------------------------------------------------------------------------------
  3. CREATE PROCEDURE calculatingSum @orderID INT, @price INT OUTPUT
  4. AS
  5. DECLARE @orderQuantity INT, @orderProdPrice INT, @currProductId INT, @orderSum INT = 0, @orderCount INT
  6. DECLARE currentOrder CURSOR
  7. FOR
  8. SELECT Order_items_product, Order_items_quantity FROM Order_items WHERE Order_id = @orderID;
  9. SELECT @orderCount = COUNT(Order_id) FROM Order_items WHERE Order_id = @orderID;
  10. IF @orderCount != 0
  11. BEGIN
  12. OPEN currentOrder
  13. FETCH NEXT FROM currentOrder INTO @currProductID, @orderQuantity
  14. WHILE @@FETCH_STATUS = 0
  15. BEGIN
  16. SELECT @orderProdPrice = Product_price FROM Products WHERE Product_id = @currProductId
  17. SET @orderSum = @orderSum + ( @orderQuantity * @orderProdPrice )
  18. FETCH NEXT FROM currentOrder INTO @currProductID, @orderQuantity
  19. END
  20. END
  21. CLOSE currentOrder
  22. DEALLOCATE currentOrder
  23. SET @price = @orderSum
  24. IF @orderCount = 0
  25. BEGIN
  26. SET @price = 0
  27. PRINT 'There is no such order'
  28. END
  29.  
  30. ------------------------------------------------------------------------------'
  31.  
  32. Calculates money that customer has spent for all orders
  33. -----------------------------------------------------------------
  34. CREATE PROCEDURE customerMoneySpent @customer INT
  35. AS
  36. DECLARE @totalAmount INT = 0, @customerCount INT, @orderSum INT, @orderId INT
  37. DECLARE orders CURSOR
  38. FOR
  39. SELECT Order_id FROM Orders WHERE Order_customer = @customer
  40. SELECT @customerCount = COUNT(Order_id) FROM Orders WHERE Order_customer = @customer
  41. IF @customerCount != 0
  42. BEGIN
  43. OPEN orders
  44. FETCH NEXT FROM orders INTO @orderId
  45. WHILE @@FETCH_STATUS = 0
  46. BEGIN
  47. EXEC calculatingSum @orderId, @price = @orderSum OUTPUT
  48. SET @totalAmount = @totalAmount + @orderSum
  49. FETCH NEXT FROM orders INTO @orderId
  50. END
  51. CLOSE orders
  52. DEALLOCATE orders
  53. PRINT 'Customer: ' + cast(@customer as VARCHAR) + ' has spent: ' + cast(@totalAmount as VARCHAR)
  54. END
  55. IF @customerCount = 0
  56. BEGIN
  57. PRINT 'There is no such customer'
  58. END
  59. ------------------------------------------------------------------------------------
  60.  
  61. Finding customers that have spent more money than @x  (RESULT SET)
  62.  
  63. ----------------------------------------------------------------------------
  64.  
  65. CREATE PROCEDURE customerSpentMoreThan @x INT
  66. AS
  67. DECLARE @custID INT, @moneySpent INT
  68. DECLARE currentCustomer CURSOR
  69. FOR
  70. SELECT DISTINCT Order_customer FROM Orders;
  71. OPEN currentCustomer
  72. FETCH NEXT FROM currentCustomer INTO @custID
  73. WHILE @@FETCH_STATUS = 0
  74. BEGIN
  75. EXEC customerMoneySpentOutput @custID, @totalOut = @moneySpent OUTPUT
  76. INSERT INTO Customer_spent VALUES (@custID, @moneySpent)
  77. FETCH NEXT FROM currentCustomer INTO @custID
  78. END
  79. CLOSE currentCustomer
  80. DEALLOCATE currentCustomer
  81. IF (SELECT count(Customer_spent_id) FROM Customer_spent WHERE Customer_spent_money > @x) > 0
  82. BEGIN
  83. SELECT * FROM Customer_spent WHERE Customer_spent_money > @x
  84. DELETE FROM Customer_spent
  85. END
  86. ELSE
  87. PRINT 'There is no one who earns more than: '  + cast(@x as VARCHAR)
  88. ^
  89. |
  90. |
  91. |
  92. CREATE PROCEDURE customerMoneySpentOutput @customer INT, @totalOut INT OUTPUT
  93. AS
  94. DECLARE @totalAmount INT = 0, @orderSum INT, @orderId INT
  95. DECLARE currOrder CURSOR
  96. FOR
  97. SELECT Order_id FROM Orders WHERE Order_customer = @customer
  98. OPEN currOrder
  99. FETCH NEXT FROM currOrder INTO @orderId
  100. WHILE @@FETCH_STATUS = 0
  101. BEGIN
  102. EXEC calculatingSumOut @orderId, @price = @orderSum OUTPUT
  103. SET @totalAmount = @totalAmount + @orderSum
  104. FETCH NEXT FROM currOrder INTO @orderId
  105. END
  106. CLOSE currOrder
  107. DEALLOCATE currOrder
  108. SET @totalOut = @totalAmount
  109. ^
  110. |
  111. |
  112. |
  113. CREATE PROCEDURE calculatingSumOut @orderID INT, @price INT OUTPUT
  114. AS
  115. DECLARE @orderQuantity INT, @orderProdPrice INT, @currProductId INT, @orderSum INT = 0
  116. DECLARE currentOrder CURSOR
  117. FOR
  118. SELECT Order_items_product, Order_items_quantity FROM Order_items WHERE Order_id = @orderID;
  119. OPEN currentOrder
  120. FETCH NEXT FROM currentOrder INTO @currProductID, @orderQuantity
  121. WHILE @@FETCH_STATUS = 0
  122. BEGIN
  123. SELECT @orderProdPrice = Product_price FROM Products WHERE Product_id = @currProductId
  124. SET @orderSum = @orderSum + ( @orderQuantity * @orderProdPrice )
  125. FETCH NEXT FROM currentOrder INTO @currProductID, @orderQuantity
  126. END
  127. CLOSE currentOrder
  128. DEALLOCATE currentOrder
  129. SET @price = @orderSum
  130. -----------------------------------------------------------------
  131.  
  132. finding customer with max spent money (RETURN TYPE)
  133. ---------------------------------------------------------
  134. CREATE PROCEDURE findMaxSpent
  135. AS
  136. DECLARE currentCustomer CURSOR
  137. FOR
  138. SELECT DISTINCT Order_customer FROM Orders
  139. DECLARE @maxID INT, @custID INT, @moneySpent INT
  140. OPEN currentCustomer
  141. FETCH NEXT FROM currentCustomer INTO @custID
  142. WHILE @@FETCH_STATUS = 0
  143. BEGIN
  144. EXEC customerMoneySpentOutput @custID, @totalOut = @moneySpent OUTPUT
  145. INSERT INTO Customer_spent VALUES (@custID, @moneySpent)
  146. FETCH NEXT FROM currentCustomer INTO @custID
  147. END
  148. CLOSE currentCustomer
  149. DEALLOCATE currentCustomer
  150. IF (SELECT count(Customer_spent_id) FROM Customer_spent) > 0
  151. BEGIN
  152. SELECT @maxID = Customer_spent_id FROM Customer_spent WHERE Customer_spent_money =
  153. (SELECT max(Customer_spent_money) FROM Customer_spent)
  154. DELETE FROM Customer_spent
  155. RETURN @maxID
  156. END
  157. ---------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement