当前位置: 首页 > 面试题库 >

Alpha列的条件SQL ORDER BY ASC / DESC

公西岳
2023-03-14
问题内容

在MS SQL Server 2008 R2中编写存储过程,我想避免使用DSQL …

我希望有条件的排序方法(ASC或DESC)。

现在,对于一个数字列,我将只使用一个case语句并取反该值以模拟ASC或DESC …即:

... ORDER BY CASE @OrderAscOrDesc WHEN 0 THEN [NumericColumn] ELSE -[NumericColumn] END ASC

用alpha列执行此操作的合适方法是什么?

编辑:我想到了一个聪明的方法,但似乎效率很低…我可以使用自动编号将有序的alpha列插入到临时表中,然后使用上述方法按自动编号进行排序。

编辑2:

你们如何看待这种方法?

ORDER BY CASE @OrderAscOrDesc WHEN 0 THEN [AlphaColumn] ELSE '' END ASC,
CASE @OrderAscOrDesc WHEN 0 THEN '' ELSE [AlphaColumn] END DESC

我不知道强制统一列上的排序是否比从排序后的字符串中得出数字更有效


问题答案:

一种选择

;WITH cQuery AS
(
   SELECT
       *,
       ROW_NUMBER() OVER (ORDER BY SortColumn) AS RowNum
   FROM
       MyTable
)
SELECT
   *
FROM
   cQuery
ORDER BY
   RowNum * @Direction --1 = ASC or -1 = DESC

或IMHO有点难看的CASE

ORDER BY
  CASE WHEN 'ASC' THEN SortColumn ELSE '' END ASC,
  CASE WHEN 'DESC' THEN SortColumn ELSE '' END DESC


 类似资料:
  • 问题内容: 我有两个这样的表,两个都是单独的表 另一个表包含以下结构 我需要从表II中选择AccountNo或TempAccountNo,Mycolumn,条件是 我需要选择 我需要选择 我该如何实现。 问题答案:

  • 问题内容: 我想根据当前行的值确定JOIN列。 例如,我的工作表有4个日期列:offer_date,accepted_date,start_date,reported_date。 我想根据日期查询汇率。我知道reported_date永远不会为空,但这是我的最后选择,因此我有一个优先顺序要加入到exchange_rate表中。如果这是正确的方法,我不太确定如何使用CASE语句执行此操作。 问题答案

  • Alpha-Beta剪枝算法(Alpha Beta Pruning) [说明] 本文基于<<CS 161 Recitation Notes - Minimax with Alpha Beta Pruning>>,文中的图片均来源于此笔记。 Alpha-Beta剪枝用于裁剪搜索树中没有意义的不需要搜索的树枝,以提高运算速度。 假设α为下界,β为上界,对于α ≤ N ≤ β: 若 α ≤ β 则N有解

  • Alpha启动框架 Alpha是一个基于PERT图构建的Android异步启动框架,它简单,高效,功能完善。 在应用启动的时候,我们通常会有很多工作需要做,为了提高启动速度,我们会尽可能让这些工作并发进行。但这些工作之间可能存在前后依赖的关系,所以我们又需要想办法保证他们执行顺序的正确性。Alpha就是为此而设计的,使用者只需定义好自己的task,并描述它依赖的task,将它添加到Project中

  • 我有两张桌子——桌子1和桌子2。 它们有相同的列——Col1、Col2、Col3、Col4(整数)。 我将Table_2行插入Table_1。 表_1和表_2有一些基于Col1和Col2的重复值。我需要保留表_2的值,并删除表_1的重复值。 例如: 我尝试了以下方法-

  • 我有一个很大的数据表,其中每一行都需要基于完整数据表的一部分进行计算。作为一个例子,考虑下面的数据表,并假设每一行的I都需要计算当前行的id2与id1匹配的每一行的num变量之和,以及当前行的时间变量在距离当前行的时间1的范围内。 这可以通过像这样循环每一行来轻松完成 生成的 data.table 如下所示: 什么是正确的/快速的方法来做这样的事情使用data.table?