私はストアドプロシージャ内に次のSQLを持っています。 IF文を削除し、 'ASC'/'DESC'オプションを変数として渡す方法はありますか?SQL Serverの並べ替え順序を変数に格納できますか?
多くの異なる方法でクエリを実行したり、テーブルを返して外部からソートすることができます.CASEステートメントの重複を避けることができるかどうかを知りたいと思います。
IF @sortOrder = 'Desc'
BEGIN
SELECT * FROM #t_results
ORDER BY
CASE WHEN @OrderBy = 'surname' THEN surname END DESC,
CASE WHEN @OrderBy = 'forename' THEN forename END DESC,
CASE WHEN @OrderBy = 'fullName' THEN fullName END DESC,
CASE WHEN @OrderBy = 'userId' THEN userId END DESC,
CASE WHEN @OrderBy = 'MobileNumber' THEN MSISDN END DESC,
CASE WHEN @OrderBy = 'DeviceStatus' THEN DeviceStatus END DESC,
CASE WHEN @OrderBy = 'LastPosition' THEN LastPosition END DESC,
CASE WHEN @OrderBy = 'LastAlert' THEN LastAlert END DESC,
CASE WHEN @OrderBy = 'LastCommunication' THEN LastCommunication END DESC,
CASE WHEN @OrderBy = 'LastPreAlert' THEN LastPreAlert END DESC
END
ELSE
BEGIN
SELECT * FROM #t_results
ORDER BY
CASE WHEN @OrderBy = 'surname' THEN surname END DESC,
CASE WHEN @OrderBy = 'forename' THEN forename END DESC,
CASE WHEN @OrderBy = 'fullName' THEN fullName END DESC,
CASE WHEN @OrderBy = 'userId' THEN userId END DESC,
CASE WHEN @OrderBy = 'MobileNumber' THEN MSISDN END DESC,
CASE WHEN @OrderBy = 'DeviceStatus' THEN DeviceStatus END DESC,
CASE WHEN @OrderBy = 'LastPosition' THEN LastPosition END DESC,
CASE WHEN @OrderBy = 'LastAlert' THEN LastAlert END DESC,
CASE WHEN @OrderBy = 'LastCommunication' THEN LastCommunication END DESC,
CASE WHEN @OrderBy = 'LastPreAlert' THEN LastPreAlert END DESC
END
END
派生テーブルまたは結果セット内にある必要はありません。 ORDER BY句で式を使用できます。私はあなたの応答を見た前に例を提出しました。 +1:データ型の同期に関する良い点。 –
重複したCASE文を削除するには、それはカラム –