Встроенный просмотр

Возможно, кто-то может помочь с разработкой запроса для удовлетворения этих требований. Мне нужно, чтобы это было частью встроенного представления, которое будет присоединено к большему запросу.

У меня есть базовая таблица адресов электронной почты:

EMAIL
jon@a.com
art@b.com

Тогда у меня есть таблица, которая называется UPLOAD_HISTORY. Пример данных:

EMAIL        FILETYPE   FILENAME
jon@a.com    1          file1.txt 
jon@a.com    2          filex.txt 
jon@a.com    4          fileb.txt 

Тогда есть таблица типов файлов:

FILE ID     FILE TYPE
   1         TYPE A
   2         TYPE B
   3         TYPE C
   4         TYPE D

Если я выполню запрос и внешне соединю UPLOAD_HISTORY и FILE_TYPES, я получу что-то вроде этого:

EMAIL     FILETYPE     FILENAME
jon@a.com    1          file1.txt
jon@a.com    2          filex.txt
             3
jon@a.com    4          fileb.txt

Что мне нужно для пропущенной записи, это заполнить пропущенные значения из таблицы UPLOAD_HISTORY. Мой идеальный набор результатов будет выглядеть так:

EMAIL        FILETYPE   FILENAME      STATUS
jon@a.com    1          file1.txt     1
jon@a.com    2          filex.txt     1
jon@a.com    3                        0
jon@a.com    4          fileb.txt     1

Я ищу, чтобы получить все типы файлов, электронное письмо для каждой строки и статус 1, если есть запись для этого типа файла, или 0, если нет........

Иногда могут быть пройдены критерии. Я могу попросить конкретный тип файла или нет.

Если в конкретном письме нет записей в таблице UPLOAD_HISTORY, возможно ли получить пустые записи?

EMAIL        FILETYPE   FILENAME     STATUS
jon@a.com    1          file1.txt     1
jon@a.com    2          filex.txt     1
jon@a.com    3                        0
jon@a.com    4          fileb.txt     1
art@b.com    1                        0
art@b.com    2                        0
art@b.com    3                        0
art@b.com    4                        0

Тем не менее, я мог бы попросить только Тип файла 1:

EMAIL     FILETYPE     FILENAME    STATUS
jon@a.com    1          file1.txt     1
art@b.com    1                        0

Спасибо

2 ответа

Используйте CROSS JOIN на email а также file_type чтобы получить все комбинации, затем НАЙДИТЕ ВНЕШНЕЕ upload_history чтобы получить результаты, которые вы хотите.

Предполагая, что в upload_history для каждой комбинации это должно работать хорошо:

select eft.email
       , eft.filetype
       , uh.filename
       , nvl2(uh.filename, 1, 0) as status
from   ( select email, file_id, filetype
         from email 
         cross join file_type ) eft
left outer join upload_history uh
    on uh.email = eft.email
    and uh.filetype = eft.filetype
order by eft.email
       , eft.filetype

Вы не указали, что должно произойти, если в upload_history для каждой комбинации. Может быть, один ряд на filename верно. Но цель status колонка кажется немного избыточной.

Левое объединение типов файлов с историей:

select EMAIL, FILETYPE, FILENAME, nvl(STATUS, 0) as STATUS
from file_type
left join upload_history on FILETYPE = FILE_ID
Другие вопросы по тегам