Как объявить переменную внутри оператора выбора Oracle - PullRequest
0 голосов
/ 03 января 2019

У меня есть запрос Oracle SQL:

SELECT col1,
       col2,
       DECODE(
                 SUM(CASE WHEN col3='A' AND col4='+' THEN col5 ELSE 0 END),
                 NULL,
                 0,
                 SUM(CASE WHEN col3='A' AND col4='+' THEN col5 ELSE 0 END)
             )
FROM mytable
group by col1, col2;

Я спрашиваю, есть ли способ объявить переменную определенного типа и получить что-то вроде этого:

SELECT col1,
       col2,
       DECODE(
                 myVariable,
                 NULL,
                 0,
                 myVariable
             )
FROM mytable
group by col1, col2;

Ответы [ 4 ]

0 голосов
/ 03 января 2019

Вы можете использовать coalesce(). Я думаю, что этого достаточно:

select col1, col2,
       coalesce(sum(case when col3 = 'A' and col4 = '+' then col5 end), 0)
from mytable
group by col1, col2;

На самом деле это выражение:

sum(case when col3 = 'A' and col4 = '+' then col5 else 0 end)

Невозможно вернуть NULL в запросе с group by - каждая группа имеет хотя бы одну строку, и else гарантирует 0 возврат, а не NULL.

Итак, это также должно делать то, что вы хотите:

select col1, col2,
       sum(case when col3 = 'A' and col4 = '+' then col5 end)
from mytable
group by col1, col2;
0 голосов
/ 03 января 2019

Да, вы можете использовать переменные замещения:

SELECT col1,
       col2,
       DECODE(
                 &&myVariable,
                 NULL,
                 0,
                 &&myVariable
             )
FROM mytable
group by col1, col2;

Подробнее здесь Переменные замещения Oracle SQL * Plus

0 голосов
/ 03 января 2019

Вы можете просто использовать coalesce() (или nvl()) вместо decode().

SELECT col1,
       col2,
       coalesce(sum(CASE
                      WHEN col3 = 'A'
                           AND col4 = '+' THEN
                        col5
                      ELSE
                        0
                    END),
                0)
       FROM mytable
       GROUP BY col1,
                col2;
0 голосов
/ 03 января 2019

нет, но вы можете сделать подзапрос:

SELECT col1,
       col2,
       DECODE(
                 SUM(myColumn),
                 NULL,
                 0,
                 SUM(myColumn)
             )
FROM (
    SELECT 
        col1,
        col2,
        CASE WHEN col3='A' AND col4='+' THEN col5 ELSE 0 END myColumn   
        FROM mytable
     ) a
group by col1, col2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...