row_number () over () непрерывный выбор объединения - PullRequest
1 голос
/ 16 апреля 2019

Я создаю таблицу и вставляю данные в эту таблицу с помощью запроса query1 union2. Проблема заключается в том, что я хочу добавить row_number () в таблицу, однако, когда я добавляю row_number () over () к любому из запросов, нумерация применяется только к query1 или query2, но не ко всей таблице в целом.

Я сделал хак, чтобы получить свой результат, где я вставляю данные в таблицу (table_no_serial), используя вставку query1 union query2, затем я создаю вторую таблицу примерно так

insert into table_w_serial select row_number() over(), * from table_no_serial;

возможно ли сделать это правильно с первого раза?

insert into table purchase_table 
select row_number() over(), w.ts, w.tail, w.event, w.action, w.msg, w.tags 
from table1 w 
where 
w.action = 'stop'
union 
select row_number() over(), t.ts, t.tail, t.event, t.action, t.msg, t.tags 
from table2 t
where 
f.action = 'stop';

Я хочу, чтобы что-то подобное заработало.

Я хочу написать код, в котором результирующая таблица (endtable) будет объединением первого запроса и второго запроса и будет включать постоянный номер строки в обоих запросах, так что если query1 возвращает 50 результатов, а query2 возвращает 40 результатов , Конечная таблица будет иметь номер строки от 1 до 90

1 Ответ

1 голос
/ 16 апреля 2019

Используйте подзапрос:

insert into table purchase_table ( . . . ) -- include column names here
    select row_number() over (), ts, tail, event, action, msg, tags
    from ((select w.ts, w.tail, w.event, w.action, w.msg, w.tags 
           from table1 w 
           where w.action = 'stop'
          ) union all 
          (select w.ts, w.tail, w.event, w.action, w.msg, w.tags 
           from table2 w
           where f.action = 'stop'
          )
         ) w;

Обратите внимание, что это также меняет union на union all.union all более эффективно;используйте union, только если вы хотите нести дубликаты.

...