Advertisement
DawidS28

inline

Jan 10th, 2016
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 4.71 KB | None | 0 0
  1. CREATE FUNCTION KwotaWplaconaPrzedTerminem (@id_naleznosci int)
  2. RETURNS TABLE AS RETURN(
  3.     SELECT(
  4.     CAST(
  5.         ISNULL(
  6.             (
  7.                 select sum(w.kwota) from naleznosci as n
  8.                 inner join wplaty as w
  9.                 on n.id = w.naleznosci_id
  10.                 where n.termin >= w.data_wplaty AND n.id = @id_naleznosci
  11.                 group by n.id
  12.             ),
  13.             0.00
  14.         )
  15.         AS DECIMAL(15,2)
  16.     )
  17.     ) AS KwotaWplaconaPrzedTerminem
  18. )
  19.  
  20. CREATE FUNCTION PoprzedniaWplata (@id_naleznosci int, @id_wplaty int)
  21. RETURNS TABLE AS RETURN
  22. (  
  23.     select top 1 * from
  24.     (
  25.         select termin from naleznosci as nn
  26.         where nn.id = @id_naleznosci
  27.             AND termin < ( select www.data_wplaty from wplaty as www where www.id = @id_wplaty )
  28.    
  29.         union
  30.  
  31.         select ww.data_wplaty from wplaty as ww
  32.             where ww.data_wplaty < ( select www.data_wplaty from wplaty as www where www.id = @id_wplaty )
  33.             AND ww.naleznosci_id = @id_naleznosci
  34.    
  35.     ) as squery
  36.    
  37.     order by case when termin is null then 1 else 0 end, termin desc
  38. )
  39.  
  40. CREATE FUNCTION PoczatekZakresu (@id_naleznosci int, @id_wplaty int, @s_dzien date)
  41. RETURNS TABLE AS RETURN
  42. (
  43.     SELECT CASE WHEN
  44.         (SELECT * FROM PoprzedniaWplata(@id_naleznosci, @id_wplaty)) IS NULL
  45.         THEN (SELECT dateadd(day, -1, (select ww.data_wplaty from wplaty as ww where ww.id = @id_wplaty)))
  46.         ELSE
  47.         (
  48.             SELECT
  49.                 IIF(
  50.                     (select nn.termin from naleznosci as nn where nn.id = @id_naleznosci)
  51.                         >= (select ww.data_wplaty from wplaty as ww where ww.id = @id_wplaty),
  52.                     (select ww.data_wplaty from wplaty as ww where ww.id = @id_wplaty) ,
  53.                    
  54.                     (
  55.                         SELECT
  56.                             IIF
  57.                             (
  58.                                 (SELECT * FROM PoprzedniaWplata(@id_naleznosci, @id_wplaty) as pw1) > @s_dzien ,
  59.                                 (SELECT * FROM PoprzedniaWplata(@id_naleznosci, @id_wplaty) as pw2) , @s_dzien
  60.                             )
  61.                     )
  62.                 )
  63.         )
  64.         END
  65.     AS data_od 
  66. )
  67.  
  68. CREATE FUNCTION KoniecZakresu (@id_naleznosci int, @id_wplaty int, @s_dzien date)
  69. RETURNS TABLE AS RETURN
  70. (
  71.     SELECT CASE WHEN
  72.         (SELECT ww.data_wplaty from wplaty as ww where ww.id = @id_wplaty) <=
  73.             (SELECT nn.termin from naleznosci as nn where nn.id = @id_naleznosci)
  74.         THEN
  75.             (SELECT ww.data_wplaty from wplaty as ww where ww.id = @id_wplaty)
  76.         ELSE (
  77.             select top 1 * from
  78.             (
  79.                 SELECT GETDATE() as termin
  80.    
  81.                 union
  82.  
  83.                 select sss.dzien from stawki as sss
  84.                 where sss.dzien > ( SELECT * FROM PoczatekZakresu (@id_naleznosci, @id_wplaty, @s_dzien) )
  85.  
  86.                 union
  87.    
  88.                 select wx.data_wplaty from wplaty as wx
  89.                 where wx.data_wplaty > ( SELECT * FROM PoczatekZakresu (@id_naleznosci, @id_wplaty, @s_dzien) )
  90.                     AND wx.naleznosci_id = @id_naleznosci
  91.  
  92.             ) as data_do
  93.             order by termin asc
  94.         )
  95.     END
  96.     as data_do
  97. )
  98.  
  99. CREATE FUNCTION RoznicaDniZakresu (@id_naleznosci int, @id_wplaty int, @s_dzien date)
  100. RETURNS TABLE AS RETURN
  101. (
  102.     SELECT
  103.     (
  104.         datediff(  
  105.             day,
  106.             (SELECT * FROM PoczatekZakresu(@id_naleznosci, @id_wplaty, @s_dzien)),
  107.             (SELECT * FROM KoniecZakresu(@id_naleznosci, @id_wplaty, @s_dzien))
  108.  
  109.         )
  110.     ) as RoznicaDniZakresu
  111. )
  112.  
  113. CREATE FUNCTION OdsetkiPoWplacie(@id_naleznosci int, @id_wplaty int, @s_dzien date)
  114. RETURNS TABLE AS RETURN
  115. (
  116.     SELECT
  117.         IIF
  118.         (
  119.             ((SELECT * FROM KoniecZakresu(@id_naleznosci, @id_wplaty, @s_dzien)) -- data_do
  120.                 = (select ww.data_wplaty from wplaty as ww where ww.id = @id_wplaty)),
  121.             ( SUM(
  122.                 (SELECT * FROM RoznicaDniZakresu(@id_naleznosci, @id_wplaty, @s_dzien)) * IIF((select ww.data_wplaty from wplaty as ww where ww.id = @id_wplaty) <= (select nn.termin from naleznosci as nn where nn.id = @id_naleznosci), 0, (select ss.stawka from stawki as ss where ss.dzien = @s_dzien) * 1)/365/100  
  123.             ) OVER (partition by @id_wplaty)),
  124.         0) 
  125.     AS OdsetkiPoWplacie
  126. )
  127.  
  128. CREATE FUNCTION CzyKoniecWplaty(@id_naleznosci int, @id_wplaty int, @s_dzien date)
  129. RETURNS TABLE AS RETURN
  130. (
  131.     SELECT
  132.         IIF(
  133.             ((SELECT * FROM KoniecZakresu(@id_naleznosci, @id_wplaty, @s_dzien)) -- data_do
  134.             = (select ww.data_wplaty from wplaty as ww where ww.id = @id_wplaty)), 1 , 0)
  135.     AS CzyKoniecWplaty
  136. )
  137.  
  138. CREATE FUNCTION CzyPierwszaWplata (@id_naleznosci int, @id_wplaty int)
  139. RETURNS TABLE AS RETURN
  140. (
  141.     SELECT CASE WHEN (
  142.         select top 1 ww.data_wplaty from wplaty as ww
  143.         where ww.data_wplaty < ( select www.data_wplaty from wplaty as www where www.id = @id_wplaty )
  144.             AND ww.naleznosci_id = @id_naleznosci
  145.         order by ww.data_wplaty desc
  146.     ) IS NULL
  147.     THEN 1
  148.     ELSE 0
  149.     END
  150.     AS CzyPierwszaWplata
  151. )
  152.  
  153. CREATE FUNCTION Obciazenia (@id_naleznosci int, @id_wplaty int, @s_dzien date)
  154. RETURNS TABLE AS RETURN
  155. (
  156.     SELECT ( IIF((SELECT * FROM CzyPierwszaWplata(@id_naleznosci, @id_wplaty)) = 1
  157.         AND (SELECT * FROM CzyKoniecWplaty(@id_naleznosci, @id_wplaty, @s_dzien)) = 1, (select nn.kwota from naleznosci as nn where nn.id = @id_naleznosci), 0) )
  158.     AS Obciazenia
  159. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement