Oracle - присоединение встроенной таблицы или таблицы на лету - PullRequest
1 голос
/ 01 июня 2019

У меня проблема с тем, что код проверки хранится в моей таблице вместе с другими данными.К сожалению, описание хранится в таблице, к которой у меня нет доступа.Я знаю значения

Пример

enter image description here

12, 14 и 22 - описание для них доступно в Excel.У меня нет прав на создание таблицы для хранения данных, и мне нужно запускать их каждый день как отчетную работу.

  • 12 - Пропущенная работа
  • 14 - Отсутствует
  • 22 - Неполный

Вопрос: как мне написать запрос, в котором я могу создать фиктивную таблицу (встроенную? На лету?) Со значениями в Excel и присоединиться к моей таблице так, чтобырезультаты выглядят так:

enter image description here

Примечание:

  • Не могу создать таблицу разрешений - нет разрешений.Это только для чтения Db для меня
  • Я хочу дать 12, MissingWork, 14, Отсутствует как часть моего запроса

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

Ответы [ 4 ]

1 голос
/ 01 июня 2019

Вы можете использовать то, что называется Common Table Expressions (CTE)

WITH Code_lookup AS (
  SELECT 12 Code, 'Missing Work' Description FROM DUAL UNION ALL
  SELECT 14, 'Absent' FROM DUAL UNION ALL
  SELECT 22, 'Incomplete' FROM DUAL)
SELECT <your columns list>
  FROM <your table>
  JOIN Code_lookup USING (Code)
1 голос
/ 01 июня 2019

Как вы знаете эти коды и описания, простой вариант - создать CTE;в следующем примере он называется excel.Другой CTE в этом примере представляет ваш «настоящий» table1 (я мог бы создать его в своей базе данных, но CTE достаточно хорош, чтобы показать, что делать).

SQL> with excel (code, description) as
  2    (select 12, 'Missing Work' from dual union all
  3     select 14, 'Absent'       from dual union all
  4     select 22, 'Incomplete'   from dual
  5    ),
  6    table1 (c_date, task, code) as
  7    (select date '2019-05-30', 'Homework', 12 from dual union all
  8     select date '2019-05-31', 'Labwork' , 14 from dual union all
  9     select date '2019-05-30', 'Other'   , 22 from dual
 10    )
 11  select t.c_date, t.task, t.code, e.description
 12  from table1 t join excel e on e.code = t.code;

C_DATE     TASK           CODE DESCRIPTION
---------- -------- ---------- ------------
05/30/2019 Homework         12 Missing Work
05/31/2019 Labwork          14 Absent
05/30/2019 Other            22 Incomplete

SQL>
1 голос
/ 01 июня 2019

Это можно сделать, присоединившись к подзапросу, который SELECT определяет каждую пару описания кода FROM dual и использует UNION ALL для объединения своих результатов в один набор.

SELECT t1.date,
       t1.task,
       t1.code,
       x.description
       FROM table1 t1
            LEFT JOIN (SELECT 12 code,
                              'Missing Work' description
                              FROM dual
                       UNION ALL
                       SELECT 14 code,
                              'Absent' description
                              FROM dual
                       ...) x
                      ON x.code = t1.code;
0 голосов
/ 01 июня 2019

Возможно использовать общее табличное выражение с объединением:

with descr (code, description) as (
    select 12, 'Missing Work' from dual union
    select 14, 'Absent' from dual union
    select 22, 'Incomplete' from dual
)
select table1.date, table1.task, table1.code, descr.description
from table1
left join descr on table1.code = descr.code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...