Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 4.85 KB | None | 0 0
  1. USE master
  2. GO
  3.  
  4. IF  EXISTS (
  5.         SELECT name
  6.                 FROM sys.DATABASES
  7.                 WHERE name = N'AlexanderDubikovsky3'
  8. )
  9. ALTER DATABASE AlexanderDubikovsky3 SET single_user WITH ROLLBACK immediate
  10. GO
  11. DROP DATABASE AlexanderDubikovsky3
  12. GO
  13.  
  14. CREATE DATABASE AlexanderDubikovsky3
  15. GO
  16.  
  17. USE AlexanderDubikovsky3
  18. GO
  19.  
  20. IF OBJECT_ID('Currensies', 'U') IS NOT NULL
  21.         DROP TABLE Currensies
  22. GO
  23. CREATE TABLE Currensies
  24. (
  25.         id CHAR(3) NOT NULL,
  26.         Name VARCHAR(30) NULL,
  27.         CONSTRAINT PK_Currensies PRIMARY KEY (id)
  28. )
  29. GO
  30.  
  31. INSERT INTO Currensies
  32.                 VALUES
  33.                 ('RUB', N'Российский рубль'),
  34.                 ('USD', N'Американский доллар'),
  35.                 ('EUR', N'Евро'),
  36.                 ('GBP', N'Фунт стерлингов')
  37. GO
  38.  
  39. IF OBJECT_ID('Rates', 'U') IS NOT NULL
  40.         DROP TABLE Rates
  41. GO
  42. CREATE TABLE Rates
  43. (
  44.                 id1 CHAR(3) NOT NULL,
  45.                 id2 CHAR(3) NOT NULL,
  46.                 Rate DECIMAL(5,1) NOT NULL,
  47.                 CONSTRAINT PK_Rates PRIMARY KEY (id1, id2),
  48.                 CONSTRAINT FK_Sold FOREIGN KEY (id1)
  49.                 REFERENCES Currensies(id),
  50.                 CONSTRAINT FK_Buy FOREIGN KEY (id2)
  51.                 REFERENCES Currensies(id)
  52. )
  53.  
  54. INSERT INTO Rates
  55.                 VALUES
  56.                 ('USD', 'RUB', 45.6),
  57.                 ('RUB', 'USD', 0.0213),
  58.                 ('EUR', 'RUB', 59.31),
  59.                 ('RUB', 'EUR', 0.0171),
  60.                 ('GBP', 'RUB', 73.476),
  61.                 ('RUB', 'GBP', 0.0136),
  62.                 ('EUR', 'USD', 1.25),
  63.                 ('USD', 'EUR', 0.8),
  64.                 ('GBP', 'USD', 1.6),
  65.                 ('USD', 'GBP', 0.615),
  66.                 ('GBP', 'EUR', 1.229),
  67.                 ('EUR', 'GBP', 0.798),
  68.                 ('RUB', 'RUB', 1),
  69.                 ('USD', 'USD', 1),
  70.                 ('EUR', 'EUR', 1),
  71.                 ('GBP', 'GBP', 1)
  72.  
  73. GO
  74.  
  75. IF OBJECT_ID('Wallet', 'U') IS NOT NULL
  76.         DROP TABLE Wallet
  77. GO
  78. CREATE TABLE Wallet
  79. (
  80.                 CurID CHAR(3) NOT NULL,
  81.                 VALUE DECIMAL(38, 2) NULL,
  82.                 CONSTRAINT PK_Wallet PRIMARY KEY (CurID),
  83.                 CONSTRAINT FK_Wallet FOREIGN KEY (CurID)
  84.                 REFERENCES Currensies(id)
  85. )
  86. GO
  87.  
  88. INSERT INTO Wallet
  89.                 VALUES
  90.                 ('RUB', 1000),
  91.                 ('USD', 23.75),
  92.                 ('EUR', 205),
  93.                 ('GBP', 75.5)
  94. GO
  95.  
  96. SELECT Currensies.Name AS 'Валюта', Wallet.VALUE AS 'Сумма в кошельке'
  97. FROM Wallet
  98. INNER JOIN Currensies
  99. ON Currensies.id = Wallet.CurID
  100. GROUP BY Currensies.Name, Wallet.VALUE
  101. GO
  102.  
  103. IF OBJECT_ID (N'ConvertedValue') IS NOT NULL
  104. DROP FUNCTION ConvertedValue
  105. GO
  106. CREATE FUNCTION ConvertedValue(@CurCode CHAR(3))
  107. RETURNS DECIMAL(38,2)
  108. WITH EXECUTE AS CALLER
  109. AS
  110. BEGIN
  111.         DECLARE @VALUE DECIMAL(38,2)
  112.         SET @VALUE = (
  113.                 SELECT SUM(Wallet.VALUE*Rates.Rate)
  114.                 FROM Wallet
  115.                 INNER JOIN Rates
  116.                 ON (Wallet.CurID = Rates.id1)
  117.                 WHERE Rates.id2 = @CurCode
  118.         )
  119.         RETURN @VALUE
  120. END
  121. GO
  122.  
  123. IF OBJECT_ID (N'AddMoney') IS NOT NULL
  124. DROP PROCEDURE AddMoney
  125. GO
  126. CREATE PROCEDURE AddMoney @CurCode CHAR(3), @Quantity DECIMAL(38,2)
  127. AS
  128. BEGIN
  129. DECLARE @temp DECIMAL(38,2)
  130. IF EXISTS
  131. (
  132. SELECT VALUE FROM Wallet
  133. WHERE CurID = @CurCode
  134. )
  135. BEGIN
  136. UPDATE Wallet
  137. SET VALUE = (SELECT VALUE FROM Wallet
  138. WHERE CurID = @CurCode) + @Quantity
  139. WHERE CurID = @CurCode
  140. END
  141. ELSE
  142. BEGIN
  143. INSERT INTO Wallet
  144.         VALUES
  145.         (@CurCode, @Quantity)
  146. END
  147. END
  148.  
  149. SELECT dbo.ConvertedValue('RUB') AS 'В кошельке рублей:'
  150. SELECT dbo.ConvertedValue('USD') AS 'В кошельке долларов:'
  151. SELECT dbo.ConvertedValue('EUR') AS 'В кошельке евро:'
  152. SELECT dbo.ConvertedValue('GBP') AS 'В кошельке фунтов стерлингов:'
  153. GO
  154.  
  155. --IF OBJECT_ID (N'TakeMoney') IS NOT NULL
  156. --DROP PROCEDURE TakeMoney
  157. --GO
  158. --CREATE PROCEDURE TakeMoney @CurCode CHAR(3), @Quantity DECIMAL(38,2)
  159. --AS
  160. --BEGIN
  161. --IF NOT EXISTS
  162. --(
  163. --SELECT VALUE FROM Wallet
  164. --WHERE CurID = @CurCode
  165. --)
  166. --BEGIN
  167. --PRINT N'В кошельке нет такой валюты'
  168. --END
  169. --ELSE
  170. --BEGIN
  171. --IF (SELECT VALUE FROM Wallet
  172. --WHERE CurID = @CurCode) >= @Quantity
  173. --BEGIN
  174. --UPDATE Wallet
  175. --SET VALUE = (SELECT VALUE FROM Wallet
  176. --WHERE CurID = @CurCode) - @Quantity
  177. --WHERE CurID = @CurCode
  178. --END
  179. --ELSE
  180. --BEGIN
  181. --PRINT N'Недостаточно денего данной валюты'
  182. --END
  183. --END
  184. --END
  185.  
  186. EXECUTE AddMoney 'USD', 50
  187.  
  188. --SELECT id1,[EUR], [GBP],[RUB], [USD]
  189. --FROM (
  190. --        SELECT id1, id2, Rate
  191. --        FROM Rates
  192. --        GROUP BY id1, id2, Rate
  193. --        ) AS p
  194. --PIVOT
  195. --(
  196. --SUM(Rate)
  197. --FOR id2
  198. --IN([GBP], [USD], [EUR], [RUB])
  199. --) AS pvt
  200. --GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement