выбрать разные результаты в зависимости от условий - PullRequest
0 голосов
/ 22 мая 2018

У меня следующий запрос:

select a,b,c,firstConditionKey,secondConditionkey from 
(select ..... - big query - ..... ) as main;

Мне нужно вернуть одну строку из запроса, поэтому, если firstConditionKey не равно NULL, строка будет выглядеть как min(firstConditionKey), поскольку яне волнует, какая это строка, если это строка с firstConditionKey, иначе, если нет строк с firstconditionKey, вернуть строку из тех, которые имеют secondConditionKey или ничего, еслиих нет.

a   b   c   firstConditionKey   secondConditionKey
x   x   x          1                    1
x   x   x          2                    2
x   x   x                               2

a   b   c   firstConditionKey   secondConditionKey
x   x   x                                
x   x   x                               2
x   x   x                               2

Так что в первом случае я бы вернул первый ряд.Во втором случае я бы вернул вторую строку.

По сути, если есть строка с firstConditionKey, верните первую найденную строку, иначе верните первую строку с secondConditionKey.

1 Ответ

0 голосов
/ 22 мая 2018

Если вы хотите одну строку, вы можете использовать order by и limit.Итак, основная идея такова:

select a, b, c, firstConditionKey, secondConditionkey
from (select ..... - big query - ..... ) main
order by (firstConditionKey is not null) desc,
         (secondConditionKey is not null) desc
limit 1;

Это не решает последнее условие возврата строк, если оба ключа NULL, поэтому давайте сформулируем это как:

select a, b, c, firstConditionKey, secondConditionkey
from (select ..... - big query - ..... ) main
where firstConditionKey is not null or secondConditionKey is not null
order by (firstConditionKey is not null) desc,
         (secondConditionKey is not null) desc
limit 1;
...