Azure cosmosdb if语句的CosmosDB SQL查询语法

Azure cosmosdb if语句的CosmosDB SQL查询语法,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure Cosmosdb,Azure Cosmosdb Sqlapi,我试图找到在Azure ComsmosDB SQL查询中执行If/Case类型语句的正确语法。这是我的文件 { "CurrentStage": "Stage2", "Stage1": { "Title": "Stage 1" }, "Stage2": { "Title": "Stage 2" }, "Stage3": { "Title": "Stage 3" } } 我要做的是创建一个类似 Select c.CurrentStage, if (Curr

我试图找到在Azure ComsmosDB SQL查询中执行If/Case类型语句的正确语法。这是我的文件

{
"CurrentStage": "Stage2",
"Stage1": {
    "Title": "Stage 1"
},
"Stage2": {
    "Title": "Stage 2"
},
"Stage3": {
    "Title": "Stage 3"
}
}

我要做的是创建一个类似

        Select c.CurrentStage, 
if (CurrentStage == 'Stage1') { c.Stage1.Title } 
else if (CurrentStage == 'Stage2') { c.Stage2.Title } 
else if (CurrentStage == 'Stage3') { c.Stage3.Title } as Title
    From c
显然,我的文档和查询要比这个复杂得多,但这让您大致了解我要做的事情。根据文档中的一些其他字段,我在选择变量中有一个字段。

我建议您在Cosmos DB中使用

自定义项代码:

SQL:

输出结果:


希望它能对您有所帮助。

如果您需要大量重用此函数,Jay Gong建议的udf可能会更易于使用,但您可以在不使用udf的情况下使用三元运算符语法

例如:

select
    c.CurrentStage = 'stage1' ? c.Stage1.Title
        : c.CurrentStage = 'stage2' ? c.Stage2.Title
        : c.CurrentStage = 'stage3' ? c.Stage3.Title
        : 'your default value should you wish one'
    as title
from c

建议:与UDF相比,提供程序SQL解决方案的优点是它是自包含的,并且在执行之前不需要在服务器上设置逻辑。另外,请注意,如果逻辑完全存储在客户端应用程序中,而不是像UDF那样在客户端和服务器之间共享,则逻辑版本控制会更简单。UDF确实有它的用途(例如:跨查询的大量重用),但通常最好不用它。

。谢谢分享。
Select c.CurrentStage, 
udf.stage(c) as Title
From c
select
    c.CurrentStage = 'stage1' ? c.Stage1.Title
        : c.CurrentStage = 'stage2' ? c.Stage2.Title
        : c.CurrentStage = 'stage3' ? c.Stage3.Title
        : 'your default value should you wish one'
    as title
from c