Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Usuwanie duplikatów w dynamicznej instrukcji ROW_NUMBER() OVER ORDER BY

Jednym ze sposobów, aby to zrobić, byłoby zdefiniowanie aliasu kolumny na innym poziomie, aby można było odwoływać się do niego dwukrotnie bez powtarzania wyrażenia.

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) 

Rozważałbym jednak użycie do tego dynamicznego SQL. Ten rodzaj przechwycenia wszystkich zapytań zabije pomysł uzyskania dobrego planu, który może używać indeksów, aby uniknąć sortowania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Unikaj podwójnych cudzysłowów w SQL 2005/2008

  2. BCP - Nieprawidłowa wartość znaku dla specyfikacji rzutowania podczas importu do tabeli z kolumną IDENTITY

  3. Zadanie agenta serwera SQL działa wolno

  4. SQL Porównaj zmienną varchar z inną zmienną varchar

  5. Udzielić użytkownikowi uprawnienia do wykonywania wszystkich procedur składowanych w bazie danych?