Data Science/DB+SQL

[MYSQL] SELECT 문에서 ORDER BY 조건 동적으로 설정

DS-9VM 2021. 7. 21. 16:45
728x90
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `GetCustomers_Pager`(
   _PageIndex INT
   ,_PageSize INT
   ,_SortExpression VARCHAR(50)
   ,_SortDirection VARCHAR(50)
   ,OUT _RecordCount INT
)
BEGIN
       SET @RowNumber:=0;
  
       CREATE TEMPORARY TABLE Results
       SELECT @RowNumber:=@RowNumber+1 RowNumber
              ,CustomerID
              ,ContactName
              ,CompanyName
       FROM Customers
       -- CASE WHEN THEN END 활용한 ORDER BY 조건 설정 
       ORDER BY
        CASE WHEN _SortExpression = 'CustomerID' AND _SortDirection='ASC' THEN CustomerID END ASC,
        CASE WHEN _SortExpression = 'CustomerID' AND _SortDirection='DESC' THEN CustomerID END DESC,
        CASE WHEN _SortExpression = 'ContactName' AND _SortDirection='ASC' THEN ContactName END ASC,
        CASE WHEN _SortExpression = 'ContactName' AND _SortDirection='DESC' THEN ContactName END DESC,
        CASE WHEN _SortExpression = 'CompanyName' AND _SortDirection='ASC' THEN CompanyName END ASC,
        CASE WHEN _SortExpression = 'CompanyName' AND _SortDirection='DESC' THEN CompanyName END DESC
        ;
  
       SET _RecordCount =(SELECT COUNT(*) FROM Results);
  
       SELECT * FROM Results
       WHERE RowNumber BETWEEN(_PageIndex -1) * _PageSize + 1 AND(((_PageIndex -1) * _PageSize + 1) + _PageSize) - 1;
  
       DROP TEMPORARY TABLE Results;
END$$
DELIMITER ;

 

원문 : https://www.aspforums.net/Threads/162034/Dynamic-sorting-in-Stored-Procedure-using-MySQL/

728x90