Advertisement
PavloSerg

Untitled

Feb 17th, 2023
2,072
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 6.16 KB | None | 0 0
  1. create or alter function GetCustomerList()
  2.     returns table AS
  3.         return
  4.             (
  5.                 select distinct customer_name
  6.                 from orders
  7.             );
  8. go;
  9.  
  10. --drop function SeregaTheDed_SQLLogin_1.GetRollbackCustomer
  11.  
  12. create or alter function GetRollbackCustomer()
  13.     returns @RollbackCustomerTable TABLE
  14.                                    (
  15.                                        Customer NVARCHAR(255) NOT NULL,
  16.                                        [01]     float default (0),
  17.                                        [02]     float default (0),
  18.                                        [03]     float default (0),
  19.                                        [04]     float default (0),
  20.                                        [05]     float default (0),
  21.                                        [06]     float default (0),
  22.                                        [07]     float default (0),
  23.                                        [08]     float default (0),
  24.                                        [09]     float default (0),
  25.                                        [10]     float default (0),
  26.                                        [11]     float default (0),
  27.                                        [12]     float default (0)
  28.                                    )
  29. AS
  30. begin
  31.     declare @CurrentCustomerName nvarchar(255);
  32.     declare CustomersCursor cursor scroll for select * from SeregaTheDed_SQLLogin_1.GetCustomerList();
  33.  
  34.     open CustomersCursor;
  35.  
  36.  
  37.     FETCH NEXT FROM CustomersCursor INTO @CurrentCustomerName
  38.     while @@fetch_status = 0
  39.         begin
  40.             insert into @RollbackCustomerTable(Customer)
  41.             values (@CurrentCustomerName);
  42.  
  43.             declare @AmountPercent float = 0.1;
  44.             declare @CurrentMonthNumber int = 1;
  45.             while @CurrentMonthNumber <= 12
  46.                 begin
  47.                     declare @TotalMonthAmount float;
  48.                     select @TotalMonthAmount = sum(p5.price + p5.extra)
  49.                     from orders o
  50.                              join rel_orders_products rop5 on o.id = rop5.order_id
  51.                              join products p5 on p5.id = rop5.product_id
  52.                     where customer_name = @CurrentCustomerName
  53.                       and month(date) = @CurrentMonthNumber;
  54.  
  55.                     declare @KostilQuery nvarchar(max);
  56.                     set @KostilQuery =
  57.                                 'update @RollbackCustomerTable
  58.                                set [' + FORMAT(@CurrentMonthNumber, '00') + '] = ' +
  59.                                 CAST((@TotalMonthAmount * 0.1) as nvarchar(255)) +
  60.                                 'where Customer = N''' + @CurrentCustomerName + '''';
  61.                     --exec(@KostilQuery);
  62.                     --sp_executesql @KostilQuery;
  63.                     --exec @KostilQuery;
  64.                     --exec testtest
  65.  
  66.                     if @CurrentMonthNumber = 1
  67.                         update @RollbackCustomerTable
  68.                         set [01] = ISNULL( @TotalMonthAmount * @AmountPercent, 0)
  69.                         where Customer = @CurrentCustomerName
  70.                     else if @CurrentMonthNumber = 2
  71.                         update @RollbackCustomerTable
  72.                         set [02] = ISNULL(@TotalMonthAmount * @AmountPercent, 0)
  73.                         where Customer = @CurrentCustomerName
  74.                     else if @CurrentMonthNumber = 3
  75.                         update @RollbackCustomerTable
  76.                         set [03] = ISNULL( @TotalMonthAmount * @AmountPercent, 0)
  77.                         where Customer = @CurrentCustomerName
  78.                     else if @CurrentMonthNumber = 4
  79.                         update @RollbackCustomerTable
  80.                         set [04] = ISNULL(@TotalMonthAmount * @AmountPercent, 0)
  81.                         where Customer = @CurrentCustomerName
  82.                     else if @CurrentMonthNumber = 5
  83.                         update @RollbackCustomerTable
  84.                         set [05] = ISNULL(@TotalMonthAmount * @AmountPercent, 0)
  85.                         where Customer = @CurrentCustomerName
  86.                     else if @CurrentMonthNumber = 6
  87.                         update @RollbackCustomerTable
  88.                         set [06] = ISNULL(@TotalMonthAmount * @AmountPercent, 0)
  89.                         where Customer = @CurrentCustomerName
  90.                     else if @CurrentMonthNumber = 7
  91.                         update @RollbackCustomerTable
  92.                         set [07] = ISNULL(@TotalMonthAmount * @AmountPercent, 0)
  93.                         where Customer = @CurrentCustomerName
  94.                     else if @CurrentMonthNumber = 8
  95.                         update @RollbackCustomerTable
  96.                         set [08] =ISNULL( @TotalMonthAmount * @AmountPercent, 0)
  97.                         where Customer = @CurrentCustomerName
  98.                     else if @CurrentMonthNumber = 9
  99.                         update @RollbackCustomerTable
  100.                         set [09] = ISNULL(@TotalMonthAmount * @AmountPercent, 0)
  101.                         where Customer = @CurrentCustomerName
  102.                     else if @CurrentMonthNumber = 10
  103.                         update @RollbackCustomerTable
  104.                         set [10] = ISNULL(@TotalMonthAmount * @AmountPercent, 0)
  105.                         where Customer = @CurrentCustomerName
  106.                     else if @CurrentMonthNumber = 11
  107.                         update @RollbackCustomerTable
  108.                         set [11] = ISNULL(@TotalMonthAmount * @AmountPercent, 0)
  109.                         where Customer = @CurrentCustomerName
  110.                     else if @CurrentMonthNumber = 12
  111.                         update @RollbackCustomerTable
  112.                         set [12] = ISNULL(@TotalMonthAmount * @AmountPercent, 0)
  113.                         where Customer = @CurrentCustomerName
  114.  
  115.  
  116.                     set @CurrentMonthNumber = @CurrentMonthNumber + 1;
  117.                 end
  118.  
  119.             FETCH NEXT FROM CustomersCursor INTO @CurrentCustomerName
  120.         end
  121.  
  122.     close CustomersCursor;
  123.     deallocate CustomersCursor;
  124.     return
  125. end;
  126. go;
  127.  
  128.  
  129. select *
  130. from SeregaTheDed_SQLLogin_1.GetRollbackCustomer()
  131.  
  132.  
  133.  
  134.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement