объединение запроса в postgres - PullRequest
0 голосов
/ 26 мая 2018

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

SELECT $ID_TABLE,
        TO_CHAR($DATE_COLUMN,'YYYYMMDD') ,
        '$UPPER_HOUR',
        COUNT(1)
FROM $TABLE_NAME
WHERE DATE_TRUNC('day',$DATE_COLUMN) = cast('$TODAY' as date)
        AND TO_CHAR($DATE_COLUMN,'HH24MI') BETWEEN '$LOWER_HOUR' AND '$UPPER_HOUR'
        GROUP BY TO_CHAR($DATE_COLUMN,'YYYYMMDD');

Но в некоторых случаях запрос содержит данные, в других случаях он равен нулю.

Тогда, если он равен нулю, мне нужно выбрать другие значения, например:

SELECT(coalesce(
SELECT $ID_TABLE,
        TO_CHAR($DATE_COLUMN,'YYYYMMDD') ,
        '$UPPER_HOUR',
        COUNT(1)
FROM $TABLE_NAME
WHERE DATE_TRUNC('day',$DATE_COLUMN) = cast('$TODAY' as date)
        AND TO_CHAR($DATE_COLUMN,'HH24MI') BETWEEN '$LOWER_HOUR' AND '$UPPER_HOUR'
        GROUP BY TO_CHAR($DATE_COLUMN,'YYYYMMDD')),select $ID_TABLE, $date, $PPER_HOUR, 0);"

Возможно сделать что-то подобное.

Это для процесса со вставкой с этим выбором.

И если у меня нет строки, янужно вставить значения с постоянной датой и числом (1) = 0.

Значения с $ являются константами

Спасибо;)

Ответы [ 2 ]

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

Возможно, это то, что вы имеете в виду:

WITH t as (
      SELECT $ID_TABLE as col1, TO_CHAR($DATE_COLUMN, 'YYYYMMDD') as col2,
             '$UPPER_HOUR' as col3,
             COUNT(1) as col4
      FROM $TABLE_NAME
      WHERE DATE_TRUNC('day',$DATE_COLUMN) = cast('$TODAY' as date) AND
            TO_CHAR($DATE_COLUMN, 'HH24MI') BETWEEN '$LOWER_HOUR' AND '$UPPER_HOUR'
      GROUP BY TO_CHAR($DATE_COLUMN, 'YYYYMMDD'
     )
SELECT *
FROM T
UNION ALL
SELECT v.*
FROM (VALUES (?, ?, ?, ?)) v(col1, col2, col3, col4)
WHERE NOT EXISTS (SELECT 1 FROM t);
0 голосов
/ 26 мая 2018

Таким образом можно использовать coalesce() только в том случае, если запрос возвращает одно значение.

Вы можете использовать plpgsql block и переменную FOUND как в этом псевдокоде:

do $$
begin
    insert into my_table
    <a select query>;

    if not found then
        insert into my_table
        values(<some default values>);
    end if;
end $$;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...