如何在 Azure Cosmos DB 的 ORDER BY 查询中使用 IIF

问题描述 投票:0回答:1

我的 cosmosdb 中有一些项目,我想通过 orderStatus 来订购它们。将首先列出已接收的项目,然后列出正在处理的项目,最后列出已完成的项目。

这是我写的查询。但不幸的是,它不起作用。

SELECT * FROM c
WHERE c.orderStatus IN ('RECEIVED', 'PROCESSING', 'COMPLETED')
ORDER BY IIF(c.orderStatus = 'RECEIVED', 1, 
        IIF(c.orderStatus = 'PROCESSING', 2, 3))

我检查了文档,看看我编写的方式是否是 Cosmos DB 的有效 SQL。什么也没找到。对于查询有什么建议或替代方法吗?

azure-cosmosdb azure-cosmosdb-sqlapi
1个回答
0
投票

ORDER BY
必须能够由索引提供服务,因为 CosmosDB 不会为您对结果进行排序。

在这种情况下,你想要的顺序恰好是完全相反的字母顺序,所以你可以这样做

SELECT * FROM c
WHERE c.orderStatus IN ('RECEIVED', 'PROCESSING', 'COMPLETED')
ORDER BY c.orderStatus DESC

如果情况并非总是如此(也许您还有未显示的其他订单状态),您可以添加一个 计算属性,它返回每个订单状态的数字排序顺序并将其包含在索引策略中,然后您可以按该排序.

© www.soinside.com 2019 - 2024. All rights reserved.