Advertisement
Guest User

Untitled

a guest
May 29th, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 3.28 KB | None | 0 0
  1. ------3 zmniejsz place pracownikow pracujacych w danym dziale o okreslony procent w danym hotelu, wyswietl odpowiedni komunikat
  2. --IF EXISTS(SELECT * FROM sys.objects WHERE TYPE='P' AND name='rozmyte')
  3. --DROP PROCEDURE rozmyte
  4. --GO
  5.  
  6. --CREATE PROCEDURE rozmyte @id_pracownika INT=NULL,  @low FLOAT=NULL OUTPUT, @middle FLOAT=NULL OUTPUT, @high FLOAT=NULL OUTPUT
  7. --AS
  8. --BEGIN
  9. --  DECLARE @a INT, @b INT, @c INT, @d INT, @earning INT
  10. --  SET @earning = (SELECT e.earnings FROM hotel..employee e WHERE e.id_employee = @id_pracownika)
  11. --  SET @a = 1500
  12. --  SET @b = 3000
  13. --  SET @c = 4500
  14. --  SET @d = 6000
  15. --  BEGIN
  16. --      if (@earning <= @a)
  17. --          begin
  18. --              SET @low = 1.0
  19. --              set @middle = 0.0
  20. --              set @high = 0.0
  21. --          end
  22. --      if (@earning >= @b and @earning <= @c)
  23. --          begin
  24. --              SET @low = 0.0
  25. --              set @middle = 1.0
  26. --              set @high = 0.0
  27. --          end
  28. --      if (@earning >= @d)
  29. --          begin
  30. --              set @low = 0.0
  31. --              set @middle = 0.0
  32. --              set @high = 1.0
  33. --          end
  34.            
  35. --      if (@earning > @a and @earning < @b)
  36. --          begin
  37. --              declare @first float, @second float
  38. --              set @first = 1.0 / (@a - @b)
  39. --              set @second = -@first * @b
  40. --              set @low = @first * @earning + @second
  41. --              set @middle = 1.0 - @low
  42. --              set @high = 0.0
  43. --          end
  44. --      if (@earning > @c and @earning < @d)
  45. --          begin
  46. --              set @first = 1.0 / (@c - @d)
  47. --              set @second = -@first * @d
  48. --              set @low = 0.0
  49. --              set @middle = @first * @earning + @second
  50. --              set @high = 1.0 - @middle
  51. --          end
  52. --  END
  53. --END
  54. --GO
  55.  
  56.  
  57. --BEGIN
  58. --  DECLARE @low float, @middle float, @high float
  59. --  EXEC rozmyte 45, @low output, @middle output, @high output
  60. --  PRINT 'k'
  61. --  print cast(@low as varchar(10)) + ' ' + cast(@middle as varchar(10)) + ' ' + cast(@high as varchar(10))
  62. --END
  63. --GO
  64.  
  65. IF EXISTS(SELECT * FROM sys.objects WHERE type='FN' AND name='fn_rozmyte')
  66. DROP FUNCTION fn_rozmyte
  67. GO
  68.  
  69. CREATE FUNCTION fn_rozmyte(@earning INT, @wsp INT) RETURNS FLOAT(4)
  70. BEGIN
  71.     DECLARE @a INT, @b INT, @c INT, @d INT, @low FLOAT(4), @middle FLOAT(4), @high FLOAT(4), @return_value FLOAT(4)
  72.     SET @a = 1500
  73.     SET @b = 3000
  74.     SET @c = 4500
  75.     SET @d = 6000
  76.     BEGIN
  77.         if (@earning <= @a)
  78.             begin
  79.                 SET @low = 1.0
  80.                 set @middle = 0.0
  81.                 set @high = 0.0
  82.             end
  83.         if (@earning >= @b and @earning <= @c)
  84.             begin
  85.                 SET @low = 0.0
  86.                 set @middle = 1.0
  87.                 set @high = 0.0
  88.             end
  89.         if (@earning >= @d)
  90.             begin
  91.                 set @low = 0.0
  92.                 set @middle = 0.0
  93.                 set @high = 1.0
  94.             end
  95.            
  96.         if (@earning > @a and @earning < @b)
  97.             begin
  98.                 declare @first float, @second float
  99.                 set @first = 1.0 / (@a - @b)
  100.                 set @second = -@first * @b
  101.                 set @low = @first * @earning + @second
  102.                 set @middle = 1.0 - @low
  103.                 set @high = 0.0
  104.             end
  105.         if (@earning > @c and @earning < @d)
  106.             begin
  107.                 set @first = 1.0 / (@c - @d)
  108.                 set @second = -@first * @d
  109.                 set @low = 0.0
  110.                 set @middle = @first * @earning + @second
  111.                 set @high = 1.0 - @middle
  112.             end
  113.     END
  114.     if (@wsp = 1)
  115.         set @return_value = @low
  116.     if (@wsp = 2)
  117.         set @return_value = @middle
  118.     if (@wsp = 3)
  119.         set @return_value = @high
  120.  
  121.     RETURN @return_value
  122. END
  123. GO
  124.  
  125. SELECT e.id_employee, e.name, e.surname, e.earnings, dbo.fn_rozmyte(e.earnings, 1) AS low, dbo.fn_rozmyte(e.earnings, 2) AS middle, dbo.fn_rozmyte(e.earnings, 3) AS high
  126. FROM hotel..employee e
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement