我正在尝试根据字符串状态选择数据。我想要的是状态“草稿”首先出现,所以我尝试了以下方法:
SELECT *
FROM c
ORDER BY c.status = "draft" ? 0:1
Run Code Online (Sandbox Code Playgroud)
我收到错误:
不支持 ORDER BY 子句。ORDER BY 项目表达式无法映射到文档路径
我检查了微软网站,我看到了这个:
ORDER BY 子句要求索引策略包含正在排序的字段的索引。Azure Cosmos DB 查询运行时支持根据属性名称排序,而不是根据计算属性排序。
我想这使得我想要通过查询做的事情变得不可能......我怎样才能实现这一目标?使用存储过程?
编辑:
关于存储过程:实际上,我只是在考虑这个,这意味着,我需要在订购之前检索所有数据,这会很糟糕,因为我从数据库中获取最大 100 值...有什么办法可以做到这一点所以我不必先检索所有数据?谢谢
谢谢!
ORDER BY 项表达式无法映射到文档路径。
基本上,我们被告知只能根据文档的属性进行排序,而不能根据派生值进行排序。c.status = "draft" ? 0:1是派生值。
我的想法:
查询sql的两部分:第一部分select c.* from c where c.status ='draft',第二部分select c.* from c where c.status <> 'draft' order by c.status。最后,将它们结合起来。
或者您可以尝试使用您在问题中提到的存储过程来处理select * from c order by c.status. 通过 if-else 条件将草稿数据放在其他数据前面。
| 归档时间: |
|
| 查看次数: |
3775 次 |
| 最近记录: |