CosmosDB if语句的查询语法

时间:2018-04-24 14:50:28

标签: azure-cosmosdb

我正在尝试在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

显然,我所拥有的文档和查询比这复杂得多,但是这可以让您大致了解我正在尝试做什么。我根据文档中的其他一些字段在select中变换了一个字段。

2 个答案:

答案 0 :(得分:1)

我建议你在Cosmos DB中使用User Defined Function

udf代码:

function stage(c){
    switch(c.CurrentStage){
        case "Stage1" : return c.Stage1.Title;
        case "Stage2" : return c.Stage2.Title;
        case "Stage3" : return c.Stage3.Title;
        default: return "";
    }
}

SQL:

Select c.CurrentStage, 
udf.stage(c) as Title
From c

输出结果:

enter image description here

希望它对你有所帮助。

答案 1 :(得分:1)

虽然如果你需要重复使用这个函数,使用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

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