sql >> データベース >  >> RDS >> Sqlserver

動的 ROW_NUMBER() OVER ORDER BY ステートメントでの重複の削除

    これを行う 1 つの方法は、異なるレベルで列エイリアスを定義して、式を繰り返さずに 2 回参照できるようにすることです。

    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) 
    

    ただし、代わりに動的 SQL を使用することを検討します。この種のすべてをキャッチするクエリは、並べ替えを回避するためにインデックスを使用できる適切な計画を取得するという考えを台無しにします。



    1. ユーザーがアップロードした画像をファイルシステムに効率的に保存する

    2. SQLを使用して日付フィールドから月でグループ化する方法

    3. PyMySQLで列の順序が間違っている結果を選択する

    4. Pythonを使用してCSVデータをpostgreSQLに変換する