删除动态 ROW

编程入门 行业动态 更新时间:2024-10-11 15:24:41
本文介绍了删除动态 ROW_NUMBER() OVER ORDER BY 语句中的重复项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有以下 SQL 语句片段

I have the following snippet from a SQL statements

ROW_NUMBER() OVER (ORDER BY CASE WHEN @SortBy = 'column1 ASC' THEN cast(column1 AS sql_variant) WHEN @SortBy = 'column2 ASC' THEN cast(column2 AS sql_variant) WHEN @SortBy = 'column3 ASC' THEN cast(column3 AS sql_variant) WHEN @SortBy = 'column4 ASC' THEN cast(column4 AS sql_variant) ELSE NULL END ASC, CASE WHEN @SortBy = 'column1 DESC' THEN cast(column1 AS sql_variant) WHEN @SortBy = 'column2 DESC' THEN cast(column2 AS sql_variant) WHEN @SortBy = 'column3 DESC' THEN cast(column3 AS sql_variant) WHEN @SortBy = 'column4 DESC' THEN cast(column4 AS sql_variant) ELSE NULL END DESC) AS RowNumber

它可以工作,但它非常重复,有没有办法使 ASC/DESC 也动态化,这样我就不需要重复的 CASE 语句?

It works, but it's quite repetitive, is there a way to make the ASC/DESC dynamic as well, so I don't need the duplicated CASE statement?

推荐答案

您可以这样做的一种方法是在不同级别定义列别名,以便您可以在不重复表达式的情况下引用它两次.

One way you could do this would be to define the column alias at a different level so you can reference it twice without repeating the expression.

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.这种捕获所有查询将扼杀获得可以使用索引来避免排序的良好计划的想法.

I would consider using dynamic SQL for this instead though. This kind of catch all query will kill the idea of getting a good plan that can use indexes to avoid a sort.

更多推荐

删除动态 ROW

本文发布于:2023-10-19 17:52:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1508312.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:动态   ROW

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!