首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MSSQL按传递列表排序

MSSQL按传递列表排序
EN

Stack Overflow用户
提问于 2013-11-21 11:42:26
回答 2查看 154关注 0票数 1

我使用Lucene对SQL数据的子集执行查询,该子集返回记录I的得分列表,例如11、4、5、25、30。

我想使用这个列表从完整的SQL中检索一组结果。

所以SELECT * FROM MyFullRecord where RecordID in (11,5,3,25,30)

我希望检索到的列表能保持评分顺序。

我可以用这样的命令来做到这一点;

ORDER BY (CASE WHEN RecordID = 11 THEN 0 WHEN RecordID = 5 THEN 1 WHEN RecordID = 3 THEN 2 WHEN RecordID = 25 THEN 3 WHEN RecordID = 30 THEN 4 END)

我关注的是服务器加载的加载,特别是当我传递记录I的长列表时。有没有人有这方面的经验,或者我如何确定一个最佳的列表长度。

在MSSQL中还有其他实现此功能的方法吗?

罗杰

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-21 11:49:59

可以将列表记录到具有排序优先级的表或表变量中。然后用这个排序表连接你的桌子。

代码语言:javascript
运行
复制
DECLARE TABLE @tSortOrder (RecordID INT, SortOrder INT)
INSERT INTO @tSortOrder (RecordID, SortOrder)
SELECT 11, 1 UNION ALL
SELECT 5, 2 UNION ALL
SELECT 3, 3 UNION ALL
SELECT 25, 4 UNION ALL
SELECT 30, 5

SELECT *
FROM yourTable T
LEFT JOIN @tSortOrder S ON T.RecordID = S.RecordID
ORDER BY S.SortOrder
票数 2
EN

Stack Overflow用户

发布于 2013-11-21 11:53:57

您可以创建一个要加入的内存表,而不是创建已搜索的order语句。这对眼睛来说更容易,而且比例也更好。

SQL语句

代码语言:javascript
运行
复制
SELECT  mfr.*
FROM    MyFullRecord mfr
        INNER JOIN (
          SELECT * 
          FROM (VALUES (1, 11),
                       (2, 5),
                       (3, 3),
                       (4, 25),
                       (5, 30)
               ) q(ID, RecordID)
        ) q ON q.RecordID = mfr.RecordID
ORDER BY
        q.ID

这里的小提琴

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20120047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档