Advertisement
SquirrelInBox

Untitled

Dec 1st, 2015
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 7.96 KB | None | 0 0
  1. USE master
  2. GO
  3.  
  4. IF  EXISTS (
  5.         SELECT name
  6.                 FROM sys.DATABASES
  7.                 WHERE name = N'ElenaBeklenishcheva'
  8. )
  9. ALTER DATABASE ElenaBeklenishcheva SET single_user WITH ROLLBACK immediate
  10. GO
  11.  
  12. IF  EXISTS (
  13.         SELECT name
  14.                 FROM sys.DATABASES
  15.                 WHERE name = N'ElenaBeklenishcheva'
  16. )
  17. DROP DATABASE [ElenaBeklenishcheva]
  18. GO
  19.  
  20. CREATE DATABASE [ElenaBeklenishcheva]
  21. GO
  22.  
  23. USE [ElenaBeklenishcheva]
  24. GO
  25.  
  26. IF EXISTS(
  27.   SELECT *
  28.     FROM sys.schemas
  29.    WHERE name = N'Scheme'
  30. )
  31.  DROP SCHEMA Scheme
  32. GO
  33.  
  34. CREATE SCHEMA Scheme
  35. GO
  36.  
  37.  
  38. IF OBJECT_ID('commands', 'U') IS NOT NULL
  39.     DROP TABLE commands
  40. GO
  41.  
  42. CREATE TABLE commands (
  43.     command_id INT PRIMARY KEY NOT NULL,
  44.     command_name VARCHAR(50) UNIQUE NOT NULL
  45. )
  46. GO
  47.  
  48. INSERT INTO commands VALUES
  49. (1, 'Урал'),
  50. (2, 'Спартак'),
  51. (3, 'Рубин')
  52. GO
  53.  
  54.  
  55. IF OBJECT_ID('conists', 'U') IS NOT NULL
  56.     DROP TABLE consist
  57. GO
  58.  
  59. CREATE TABLE consist (
  60.     command_id INT NOT NULL,
  61.     player_id INT PRIMARY KEY NOT NULL,
  62.     player_surname VARCHAR(50) NOT NULL,
  63.     player_name VARCHAR(50) NOT NULL
  64.  
  65.     FOREIGN KEY (command_id) REFERENCES commands(command_id)
  66. )
  67. GO
  68.  
  69. INSERT INTO consist VALUES
  70. (1, 1, 'Арапов', 'Дмитрий'),
  71. (1, 2, 'Заболотный', 'Николай'),
  72. (1, 3, 'Жевнов', 'Юрий'),
  73. (1, 4, 'Белозеров', 'Александр'),
  74. (1, 5, 'Фомин', 'Денис'),
  75.  
  76. (2, 6, 'Ребров', 'Артем'),
  77. (2, 7, 'Гранат', 'Владимир'),
  78. (2, 8, 'Кутепов', 'Илья'),
  79. (2, 9, 'Глушаков', 'Денис'),
  80.  
  81. (3, 10, 'Кузьмин', 'Олег'),
  82. (3, 11, 'Устинов', 'Виталий'),
  83. (3, 12, 'Сорокин', 'Егор'),
  84. (3, 13, 'Жестоков', 'Максим')
  85. GO
  86.  
  87.  
  88. IF OBJECT_ID('games_info', 'U') IS NOT NULL
  89.     DROP TABLE games_info
  90. GO
  91.  
  92. CREATE TABLE games_info (
  93.     id_game INT PRIMARY KEY NOT NULL,
  94.     game_date DATE NOT NULL,
  95.     id_command_owner INT NOT NULL,
  96.     id_command_guest INT NOT NULL,
  97.     id_kipper_own INT NOT NULL,
  98.     id_kipper_g INT NOT NULL,
  99.     score_command_own INT NOT NULL,
  100.     score_command_guest INT NOT NULL
  101.  
  102.     FOREIGN KEY (id_kipper_own) REFERENCES consist(player_id),
  103.     FOREIGN KEY (id_kipper_g) REFERENCES consist(player_id)
  104. )
  105. GO
  106.  
  107. INSERT INTO games_info VALUES
  108. (1, '20151125', 1, 2, 1, 6, 1, 1),
  109. (2, '20151124', 2, 3, 7, 10, 2, 0),
  110. (3, '20151123', 3, 1, 11, 2, 0, 3),
  111. (4, '20160322', 2, 1, 7, 1, 3, 2),
  112. (5, '20160321', 3, 2, 11, 6, 1, 1),
  113. (6, '20160320', 1, 3, 1, 10, 1, 0)
  114. GO
  115.  
  116.  
  117.  
  118. IF OBJECT_ID('goals', 'U') IS NOT NULL
  119.     DROP TABLE goals
  120. GO
  121.  
  122. CREATE TABLE goals(
  123.     id_game INT NOT NULL,
  124.     id_player INT NOT NULL,
  125.     id_goal INT PRIMARY KEY NOT NULL
  126.  
  127.     FOREIGN KEY (id_player) REFERENCES consist(player_id),
  128.     FOREIGN KEY (id_game) REFERENCES games_info(id_game)
  129. )
  130. GO
  131.  
  132. INSERT INTO goals VALUES
  133. (1, 2, 1),
  134. (1, 7, 2),
  135.  
  136. (2, 8, 3),
  137. (2, 8, 4),
  138.  
  139. (3, 2, 5),
  140. (3, 3, 6),
  141. (3, 4, 7),
  142.  
  143. (4, 6, 8),
  144. (4, 8, 9),
  145. (4, 9, 10),
  146. (4, 3, 11),
  147. (4, 4, 12),
  148.  
  149. (5, 12, 13),
  150. (5, 8, 14),
  151.  
  152. (6, 3, 15)
  153. GO
  154.  
  155.  
  156. SELECT * FROM goals
  157. GO
  158.  
  159. CREATE TABLE res_raiting_table(
  160.     POSITION INT PRIMARY KEY IDENTITY NOT NULL,
  161.     Team INT UNIQUE NOT NULL,
  162.     Score INT NOT NULL,
  163.     Scored INT NOT NULL,
  164.     Missing INT NOT NULL
  165. )
  166. GO
  167.  
  168.  
  169. CREATE FUNCTION raiting_table()
  170. RETURNS @ret_raiting_table TABLE (
  171.     POSITION INT PRIMARY KEY IDENTITY NOT NULL,
  172.     Team INT UNIQUE NOT NULL,
  173.     Score INT NOT NULL,
  174.     Scored INT NOT NULL,
  175.     Missing INT NOT NULL
  176. )
  177. AS
  178. BEGIN
  179.     --заполнить таблицу
  180.     DECLARE @DATE DATE = '20151201';
  181.     DECLARE @temp_table TABLE(tteam INT,
  182.                               tscore INT,
  183.                               tscored INT,
  184.                               tmissing INT)
  185.  
  186.     DECLARE @teams_count INT;
  187.     SET @teams_count = (SELECT COUNT(commands.command_id)
  188.                         FROM commands)
  189.     DECLARE @counter INT = 1;
  190.     WHILE(@counter <= @teams_count)
  191.     BEGIN
  192.         DECLARE @score INT = 3 * (SELECT COUNT(*)
  193.                                   FROM games_info
  194.                                   WHERE (game_date < @DATE OR game_date = @DATE) AND(
  195.                                         id_command_guest = @counter
  196.                                         AND
  197.                                         score_command_guest > score_command_own
  198.                                     ) OR (
  199.                                         games_info.id_command_owner = @counter
  200.                                         AND score_command_own > score_command_guest
  201.                                     ))
  202.         SET @score = @score + (SELECT COUNT(*)
  203.                                   FROM games_info
  204.                                   WHERE (game_date < @DATE OR game_date = @DATE) AND(
  205.                                         id_command_guest = @counter
  206.                                         AND
  207.                                         score_command_guest = score_command_own
  208.                                     ) OR (
  209.                                         games_info.id_command_owner = @counter
  210.                                         AND score_command_own = score_command_guest
  211.                                     ))
  212.  
  213.         DECLARE @scored INT = (SELECT SUM(score_command_own)
  214.                                FROM games_info
  215.                                WHERE id_command_owner = @counter AND (game_date < @DATE OR game_date = @DATE))
  216.         SET @scored = @scored +  (SELECT SUM(score_command_guest)
  217.                                FROM games_info
  218.                                WHERE id_command_guest = @counter AND (game_date < @DATE OR game_date = @DATE))
  219.  
  220.         DECLARE @missing INT = (SELECT SUM(score_command_guest)
  221.                                FROM games_info
  222.                                WHERE id_command_owner = @counter AND (game_date < @DATE OR game_date = @DATE))
  223.         SET @missing = @missing +  (SELECT SUM(score_command_own)
  224.                                FROM games_info
  225.                                WHERE id_command_guest = @counter AND (game_date < @DATE OR game_date = @DATE))
  226.    
  227.         INSERT INTO @temp_table VALUES(@counter, @score, @scored, @missing)
  228.  
  229.         SET @counter = @counter + 1
  230.     END
  231.  
  232.     INSERT @ret_raiting_table
  233.     SELECT *
  234.     FROM @temp_table
  235.     ORDER BY tscore DESC
  236.     RETURN
  237. END
  238. GO
  239.  
  240.  
  241. IF OBJECT_ID('raiting', 'V') IS NOT NULL
  242.     DROP VIEW raiting
  243. GO
  244.  
  245. CREATE VIEW raiting AS
  246. SELECT POSITION,
  247.        commands.command_name AS Commands,
  248.        Score,
  249.        Scored,
  250.        Missing
  251. FROM raiting_table()
  252. INNER JOIN commands ON commands.command_id = Team
  253. GO
  254.  
  255. -- результаты личных встреч
  256. CREATE FUNCTION Scheme.win_count(@teamId INT)
  257. RETURNS INT
  258. AS
  259. BEGIN
  260. RETURN (
  261.     (
  262.     SELECT COUNT(*)
  263.     FROM games_info
  264.     WHERE (
  265.         id_command_owner = @teamId AND score_command_own > score_command_guest
  266.         ) OR (
  267.         id_command_guest = @teamId AND score_command_own < score_command_guest
  268.         )
  269.         )
  270. )
  271. END
  272. GO
  273.  
  274. -- количество голов на поле соперника
  275. CREATE FUNCTION Scheme.guest_goals(@teamId INT)
  276. RETURNS INT
  277. AS
  278. BEGIN
  279. RETURN (
  280.     SELECT SUM(games_info.score_command_guest)
  281.     FROM games_info
  282.     WHERE (
  283.         id_command_guest = @teamId
  284.     )
  285. )
  286. END
  287. GO
  288.  
  289. SELECT * FROM raiting
  290.  
  291. IF OBJECT_ID('kippers', 'V') IS NOT NULL
  292.     DROP VIEW kippers
  293. GO
  294.  
  295. --представление с вратарями
  296. CREATE VIEW kippers AS
  297. SELECT games_info.game_date AS 'Дата игры',
  298.        commands.command_name AS 'Команда',
  299.        consist.player_surname + ' ' + consist.player_name AS 'Вратарь'
  300. FROM games_info
  301.     INNER JOIN commands ON commands.command_id = games_info.id_command_owner
  302.     INNER JOIN consist ON consist.player_id = games_info.id_kipper_own
  303. UNION (
  304. SELECT games_info.game_date AS 'Дата игры',
  305.        commands.command_name AS 'Команда',
  306.        consist.player_surname + ' ' + consist.player_name AS 'Вратарь'
  307. FROM games_info
  308.     INNER JOIN commands ON commands.command_id = games_info.id_command_guest
  309.     INNER JOIN consist ON consist.player_id = games_info.id_kipper_g   
  310. )
  311. GO
  312.  
  313. SELECT * FROM kippers
  314. ORDER BY 'Команда'
  315. GO
  316.  
  317.  
  318. IF OBJECT_ID('bombardiers', 'V') IS NOT NULL
  319.     DROP VIEW bombardiers
  320. GO
  321.  
  322. CREATE VIEW bombardiers AS
  323. SELECT games_info.game_date AS 'Дата игры',
  324.        commands.command_name AS 'Команда',
  325.        consist.player_surname + ' ' + consist.player_name AS 'Вратарь'
  326. FROM goals
  327.     INNER JOIN games_info ON games_info.id_game = goals.id_game
  328.     INNER JOIN consist ON consist.player_id = goals.id_player
  329.     INNER JOIN commands ON commands.command_id = consist.command_id
  330. GO
  331.  
  332. SELECT * FROM bombardiers
  333. ORDER BY 'Дата игры'
  334. GO
  335.  
  336.  
  337. SELECT 'Команды', [Урал], [Спартак], [Рубин]  
  338.     FROM (SELECT * FROM commands) p
  339. pivot (
  340.     COUNT(command_name)
  341.     FOR command_name IN ([Урал], [Спартак], [Рубин])
  342. ) t
  343. GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement