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

SQL Server动态排序依据

米楚青
2023-03-14
问题内容

我试图在存储过程中使用动态顺序,因此我可以将希望数据返回的顺序作为参数传递给存储过程。这对于VARCHAR字段工作正常,但是如果我尝试对int或datetime字段进行排序,则会出错,我的代码如下

DECLARE @ORDERBY INT
SET @ORDERBY = 1
SELECT TOP 10 * FROM TBL_LMS_USERS_RECORDs_LAST_ATTEMPT
ORDER BY 
CASE 
    WHEN @OrderBy = 1 THEN s10_record_dow
    --WHEN @OrderBy = 2 THEN pk_big_record_id
    else s10_record_dow
END

如果我取消对case语句中的第二个WHEN的注释,则会出现以下错误

“将数据类型varchar转换为bigint时出错。”

如果不使用case语句,则可以按此字段排序。

有任何想法吗?


问题答案:

更改为此:

SELECT TOP 10 * FROM TBL_LMS_USERS_RECORDs_LAST_ATTEMPT
ORDER BY 
    CASE WHEN @OrderBy = 1 THEN s10_record_dow ELSE NUll END,  
    CASE WHEN @OrderBy = 2 THEN pk_big_record_id ELSE NULL END,
    CASE WHEN @OrderBy <> 1 AND  @OrderBy <> 2 THEN s10_record_dow 
         ELSE NULL 
    END


 类似资料:
  • 问题内容: 在这里可以找到很多类似的问题,但是我认为没有一个人能够充分回答这个问题。 如果可以的话,我将继续从当前最受欢迎的问题开始,并使用其示例。 本例中的任务是获取数据库中每个作者的最新帖子。 该示例查询产生不可用的结果,因为它并不总是返回最新的帖子。 当前接受的答案是 不幸的是,这个答案是简单而简单的错误,并且在许多情况下产生的结果比原始查询更不稳定。 我最好的解决方案是使用形式的子查询 我

  • 问题内容: 我有一个要根据下拉菜单中的值动态排序的对象数组。到目前为止,这是我的清单: 但是问题是排序可以是对象的属性,也可以是使用函数的计算值。它还应该能够以降序排序(可选)。 我知道我可以在orderBy后面使用字符串作为canByAnything变量,并传递对象的属性,例如: 我也知道我可以通过如下函数订购: 但是我不知道并且想要实现的是: 如何将其组合在一起,以便我可以结合对象的属性/属性

  • 我正在尝试优化这个查询,该查询通过字段(第1个)和字段(第2个)对进行排序。没有第一个字段查询需要大约0.250秒,但有了它需要大约2.500秒(意味着慢了10倍,可怕)。有什么建议吗? 注意: -使用InnoDB(MySQL 5.7.19) -主要是表上的 -字段同时被索引和 解释结果: 更新^^ 信誉规定:一个帖子,多少(n=信誉)天可以显示在列表的顶部。 实际上,我试图给一些帖子的声誉,可以

  • 问题内容: 感觉应该有一个基本的解决方案,但我似乎没有。 进行以下查询: 我想有效地做到这一点: 我并不是很想选择DatePublished,但是按它进行排序似乎很有意义。那是行不通的。 基本上,我想按最新的DatePublished文章对类别进行排序。 问题答案: 由于执行了,因此需要在非分组列上运行一些聚合函数。 将从每个类别中选择最后发表文章的日期,并相应地订购类别。

  • 问题内容: 这是场景: 想象一下,注册用户使用创建了一个新实体,而其他注册用户创建了一个新实体,依此类推… 我想要做的是根据记录价格对记录进行排序,具体取决于前端用户选择的货币(欧元或美元)。 我无法编制索引,例如或,因为费率每小时都会变化,但是如果可能的话,更新10000条记录价格的最佳方法是什么? 1-以下是我的建议,它可行,但是我认为这可能是更好的方法,有什么建议吗? 2-如果没有,哪种性能

  • 问题内容: 我有一张标签表,想从列表中获得计数最高的标签。 样本数据如下所示 使用 让我得到正在寻找的完美数据。但是,我想对它进行组织,以使最高的标签数排在首位,并限制它仅向我发送前20个左右。 我试过了 而且我不断收到“组功能的无效使用-ErrNr 1111” 我究竟做错了什么? 我正在使用MySQL 4.1.25-Debian 问题答案: 在所有版本的MySQL中,只需在SELECT列表中为聚