CosmosDB SQL 查询语法中的 if 语句

10

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

显然,我所拥有的文档和查询比这要复杂得多,但这给出了我试图做的大致想法。我希望在选择中有1个字段是基于文档中其他字段的变量。

2个回答

18

虽然Jay Gong建议的用户自定义函数可能更容易使用,如果您需要多次重复使用此函数,但是您也可以使用三目运算符语法在不使用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确实有其用处(例如,在查询中进行重复使用),但通常最好不要使用。


漂亮的回答。感谢您的分享。 - Jay Gong

4
我建议您在Cosmos DB中使用用户定义函数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

希望它能帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接