Advertisement
Guest User

Untitled

a guest
Nov 25th, 2014
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 3.46 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. SELECT dbo.ConvertedValue('RUB') AS 'В кошельке рублей:'
  124. SELECT dbo.ConvertedValue('USD') AS 'В кошельке долларов:'
  125. SELECT dbo.ConvertedValue('EUR') AS 'В кошельке евро:'
  126. SELECT dbo.ConvertedValue('GBP') AS 'В кошельке фунтов стерлингов:'
  127. GO
  128.  
  129. SELECT id1,[EUR], [GBP],[RUB], [USD]
  130. FROM (
  131.     SELECT id1, id2, Rate
  132.     FROM Rates
  133.     GROUP BY id1, id2, Rate
  134.     ) AS p
  135. PIVOT
  136. (
  137. SUM(Rate)
  138. FOR id2
  139. IN([GBP], [USD], [EUR], [RUB])
  140. ) AS pvt
  141. GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement