sql >> Database teknologi >  >> RDS >> Sqlserver

Fjerner duplikering i dynamisk ROW_NUMBER() OVER ORDER BY-sætning

En måde du kan gøre dette på er at definere kolonnealiaset på et andet niveau, så du kan referere til det to gange uden at gentage udtrykket.

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) 

Jeg ville dog overveje at bruge dynamisk SQL til dette i stedet. Denne form for catch all-forespørgsel vil dræbe ideen om at få en god plan, der kan bruge indekser til at undgå en sortering.



  1. Find antallet af kolonner i en tabel

  2. Kan jeg ændre distributionsmetoden på en eksisterende Citus-tabel?

  3. Tjek hvor gammel en Oracle-database er?

  4. Flet to tabeller baseret på tid