CosmosDB Запрос синтаксиса для оператора if - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь найти правильный синтаксис для выполнения оператора типа If / Case в SQL-запросе Azure ComsmosDB.Вот документ, который у меня есть

{
"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 из полей в select, чтобы быть переменной, основанной на некоторых других полях в документе.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Хотя 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 действительно использует его (например: многократное повторное использование в запросах), но обычно лучше обходиться без него.

0 голосов
/ 25 апреля 2018

Я предлагаю вам использовать Определенную пользователем функцию в базе данных Cosmos.

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

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...