Advertisement
Guest User

Some T-SQL Shit.

a guest
Apr 23rd, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 5.83 KB | None | 0 0
  1. USE [DeepMarketAlgorithm]
  2. GO
  3. /****** Object:  StoredProcedure [dbo].[SP_Transactions_GetAll]    Script Date: 23-Apr-17 19:33:03 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. ALTER PROCEDURE [dbo].[SP_Transactions_GetAll] (
  9.     @oCurrentPage INT = NULL,
  10.     @oPageSize INT = NULL,
  11.     @totalPagesCount INT OUTPUT,
  12.     @actualCurrentPage INT OUTPUT,
  13.     @BrokerAccountIds NVARCHAR(MAX) = NULL,
  14.     @BrokerAccountTypeIds NVARCHAR(MAX) = NULL,
  15.     @BrokerIds NVARCHAR(MAX) = NULL,
  16.     @OrderTypeIds NVARCHAR(MAX) = NULL,
  17.     @InstrumentIds NVARCHAR(MAX) = NULL,
  18.     @SellAssetIds NVARCHAR(MAX) = NULL,
  19.     @BuyAssetIds NVARCHAR(MAX) = NULL,
  20.     @TransactionTypeIds NVARCHAR(MAX) = NULL,
  21.     @TransactionDirectionIds NVARCHAR(MAX) = NULL,
  22.     @priceStarting FLOAT = NULL,
  23.     @priceEnding FLOAT = NULL,
  24.     @timeStarting DATETIME = NULL,
  25.     @timeEnding DATETIME = NULL,
  26.     @recordDateStarting DATETIME = NULL,
  27.     @recordDateEnding DATETIME = NULL,
  28.     @editDateStarting DATETIME = NULL,
  29.     @editDateEnding DATETIME = NULL
  30. )AS
  31. BEGIN
  32.     SELECT *
  33.     INTO #filteredRows
  34.     FROM Transactions
  35.     WHERE
  36.         T_Status=1 AND
  37.         @BrokerAccountIds IS NULL OR T_ID IN (SELECT T_ID
  38.         FROM Transactions
  39.         WHERE
  40.             T_BrokerAccount_ID IN (SELECT *
  41.             FROM Split(',', @BrokerAccountIds)
  42.             )
  43.         ) AND
  44.         @BrokerAccountTypeIds IS NULL OR T_ID IN (SELECT T_ID
  45.         FROM Transactions
  46.         WHERE
  47.             T_BrokerAccount_ID IN (SELECT BA_ID
  48.             FROM BrokerAccounts
  49.             WHERE
  50.                 BA_BrokerAccountType_ID IN (SELECT *
  51.                 FROM Split(',', @BrokerAccountTypeIds)
  52.                 )
  53.             )
  54.         ) AND
  55.         @BrokerIds IS NULL OR T_ID IN (SELECT T_ID
  56.         FROM Transactions
  57.         WHERE
  58.             T_BrokerAccount_ID IN (SELECT BA_ID
  59.             FROM BrokerAccounts
  60.             WHERE
  61.                 BA_BrokerAccountType_ID IN (SELECT BAT_ID
  62.                 FROM BrokerAccountTypes
  63.                 WHERE
  64.                     BAT_Broker_ID IN (SELECT *
  65.                     FROM Split(',', @BrokerIds)
  66.                     )
  67.                 )
  68.             )
  69.         ) AND
  70.         @OrderTypeIds IS NULL OR T_ID IN (SELECT T_ID
  71.         FROM Transactions
  72.         WHERE
  73.             T_OrderType_ID IN (SELECT *
  74.             FROM Split(',', @OrderTypeIds)
  75.             )
  76.         ) AND
  77.         @InstrumentIds IS NULL OR T_ID IN (SELECT T_ID
  78.         FROM Transactions
  79.         WHERE
  80.             T_Instrument_ID IN (SELECT *
  81.             FROM Split(',', @InstrumentIds)
  82.             )
  83.         ) AND
  84.         @SellAssetIds IS NULL OR T_ID IN (SELECT T_ID
  85.         FROM Transactions
  86.         WHERE
  87.             T_Instrument_ID IN (SELECT I_ID
  88.             FROM Instruments
  89.             WHERE
  90.                 I_BaseAsset_ID IN (SELECT *
  91.                 FROM Split(',', @SellAssetIds)
  92.                 )
  93.             )
  94.         ) AND
  95.         @BuyAssetIds IS NULL OR T_ID IN (SELECT T_ID
  96.         FROM Transactions
  97.         WHERE
  98.             T_Instrument_ID IN (SELECT I_ID
  99.             FROM Instruments
  100.             WHERE
  101.                 I_QuoteAsset_ID IN (SELECT *
  102.                 FROM Split(',', @BuyAssetIds)
  103.                 )
  104.             )
  105.         ) AND
  106.         @TransactionTypeIds IS NULL OR T_ID IN (SELECT T_ID
  107.         FROM Transactions
  108.         WHERE
  109.             T_TransactionType_ID IN (SELECT *
  110.             FROM Split(',', @TransactionTypeIds)
  111.             )
  112.         ) AND
  113.         @TransactionDirectionIds IS NULL OR T_ID IN (SELECT T_ID
  114.         FROM Transactions
  115.         WHERE
  116.             T_TransactionDirection_ID IN (SELECT *
  117.             FROM Split(',', @TransactionDirectionIds)
  118.             )
  119.         ) AND
  120.         @priceStarting IS NULL OR T_Price > @priceStarting AND
  121.         @priceEnding IS NULL OR T_Price < @priceEnding AND
  122.         @timeStarting IS NULL OR T_Time > @timeStarting AND
  123.         @timeEnding IS NULL OR T_Time < @timeEnding AND
  124.         @recordDateStarting IS NULL OR T_RecordDate > @recordDateStarting AND
  125.         @recordDateEnding IS NULL OR T_RecordDate < @recordDateEnding AND
  126.         @editDateStarting IS NULL OR T_EditDate > @editDateStarting AND
  127.         @editDateEnding IS NULL OR T_EditDate < @editDateEnding
  128.     DECLARE @elements INT;
  129.     SET @elements = (SELECT COUNT(*) FROM #filteredRows);
  130.     DECLARE @pageSize INT;
  131.     DECLARE @currentPage INT;
  132.  
  133.     IF (@oPageSize IS NOT NULL) SET @pageSize = @oPageSize
  134.     ELSE SET @pageSize = @elements
  135.  
  136.     IF (@oCurrentPage IS NOT NULL) SET @currentPage = @oCurrentPage
  137.     ELSE SET @currentPage = 1
  138.  
  139.     SET @totalPagesCount =
  140.     CASE
  141.     WHEN (@elements / @pageSize) < 1
  142.     THEN 1
  143.     ELSE (@elements / @pageSize) + IIF(CEILING(@elements % @pageSize) = 0, 0, 1)
  144.     END
  145.  
  146.     SET @actualCurrentPage =
  147.     CASE
  148.     WHEN (@totalPagesCount < @currentPage)
  149.     THEN 1
  150.     ELSE @currentPage
  151.     END
  152.  
  153.     SELECT *
  154.     INTO #orderedAndPagedRows
  155.     FROM #filteredRows
  156.  
  157.     ORDER BY T_ID DESC
  158.     OFFSET (@actualCurrentPage - 1) * @pageSize ROWS
  159.     FETCH NEXT @pageSize ROWS ONLY;
  160.     SELECT *
  161.     FROM #orderedAndPagedRows
  162.  
  163.     LEFT JOIN BrokerAccounts ON
  164.     (T_BrokerAccount_ID = BA_ID AND BA_Status = 1)
  165.  
  166.     LEFT JOIN TransactionExecutionMethods ON
  167.     (T_TransactionExecutionMethod_ID = TEM_ID AND TEM_Status = 1)
  168.  
  169.     LEFT JOIN TransactionCreationTypes ON
  170.     (T_TransactionCreationType_ID = TCTP_ID AND TCTP_Status = 1)
  171.  
  172.     LEFT JOIN OrderTypes ON
  173.     (T_OrderType_ID = OTP_ID AND OTP_Status = 1)
  174.  
  175.     LEFT JOIN Instruments ON
  176.     (T_Instrument_ID = I_ID AND I_Status = 1)
  177.  
  178.     LEFT JOIN TransactionTypes ON
  179.     (T_TransactionType_ID = TTP_ID AND TTP_Status = 1)
  180.  
  181.     LEFT JOIN TransactionDirections ON
  182.     (T_TransactionDirection_ID = TD_ID AND TD_Status = 1)
  183.  
  184.     DROP TABLE #filteredRows
  185.     DROP TABLE #orderedAndPagedRows
  186. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement