sql >> Database >  >> RDS >> Sqlserver

Duplicatie verwijderen in dynamische ROW_NUMBER() OVER ORDER BY-instructie

Een manier om dit te doen is door de kolomalias op een ander niveau te definiëren, zodat u er twee keer naar kunt verwijzen zonder de uitdrukking te herhalen.

SELECT *,
       Row_number() OVER (ORDER BY 
                 CASE WHEN @SortBy LIKE '% ASC' THEN sort_col END ASC, 
                 CASE WHEN @SortBy LIKE '% DESC' THEN sort_col END DESC) AS RowNumber
FROM   YourTable
       CROSS APPLY (SELECT CASE
                             WHEN @SortBy LIKE 'column1 %' THEN Cast(column1 AS SQL_VARIANT)
                             WHEN @SortBy LIKE 'column2 %' THEN Cast(column2 AS SQL_VARIANT)
                             WHEN @SortBy LIKE 'column3 %' THEN Cast(column3 AS SQL_VARIANT)
                             WHEN @SortBy LIKE 'column4 %' THEN Cast(column4 AS SQL_VARIANT)
                           END) C(sort_col) 

Ik zou echter overwegen om hiervoor dynamische SQL te gebruiken. Dit soort catch-all-query's zal het idee om een ​​goed plan te krijgen dat indexen kan gebruiken om een ​​sortering te vermijden, doden.



  1. Hoe GROUP BY te gebruiken om een ​​resultatenset op te halen met prioriteit voor alfabetisering

  2. Sql server 2008 - prestatieafstemmingsfuncties voor het invoegen van grote hoeveelheden gegevens

  3. SQL Server-zelfstudie - Alles wat u nodig hebt om Transact-SQL onder de knie te krijgen

  4. Oracle Database Security – versleuteling en ontsleuteling