Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Menghapus duplikasi dalam pernyataan ROW_NUMBER() dinamis OVER ORDER BY

Salah satu cara Anda dapat melakukannya adalah dengan mendefinisikan alias kolom pada tingkat yang berbeda sehingga Anda dapat mereferensikannya dua kali tanpa mengulangi ekspresi.

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) 

Saya akan mempertimbangkan untuk menggunakan SQL dinamis untuk ini. Tangkap semua kueri semacam ini akan mematikan gagasan untuk mendapatkan rencana bagus yang dapat menggunakan indeks untuk menghindari pengurutan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa menyelaraskan bidang varchar ke kanan di TSQL?

  2. SQL - amankan BIGINT ke INT

  3. Ekstrak karakter di sebelah kanan nilai yang dibatasi dalam pernyataan SELECT

  4. Hasilkan kelas dari tabel database

  5. Bagaimana cara memilih catatan terakhir dari tabel dalam SQL?