Могу ли я передавать запросы SQL и их подзапросы без создания отдельных таблиц? - PullRequest
0 голосов
/ 02 октября 2019

Учитывая следующий код, можно ли передать запрос и его подзапросы в более поздние вычисления (сводную таблицу с некоторой арифметикой) без создания таблицы?

Таблицы LOGS и USERSтолько разделить поле USERNAME.

    (SELECT z.* FROM (SELECT
            L.DATE,
            UPPER(L.USERNAME) AS USERNAME,
            L.BUSINESS,
            (SELECT name FROM UID where UID_code= L.transfer) AS newname,
            L.REASON
            FROM LOGS L
            WHERE L.APPLICATION = 'A'
            AND L.BUSINESS IN ('X','Y','Z')
            AND L.DATE BETWEEN TO_DATE('1/1/2019 00:00:01', 'MM/DD/YYYY HH24:MI:SS') AND TO_DATE('2/1/2019    23:59:59','MM/DD/YYYY HH24:MI:SS'))
        AND UPPER(L.USERNAME) IN (SELECT UPPER(U.USERNAME) FROM USERS U WHERE TEAM='DATA'))z
        WHERE z.REASON ='N/A')
    ) AS EDITS; /*Alias needed to pass this query?*/

Или мне нужно начать с

CREATE TABLE EDITS_ONLY
SELECT DATE, USERNAME, BUSINESS
FROM

Или

SELECT DATE,USERNAME,BUSINESS
INTO EDITS_ONLY
FROM

Попытка изменить что-либо, кроме моеговложенные запросы SELECT приводят к ошибочно завершенной ошибке оператора SQL. (ORA-00933) Существует 3 таких блока кода, которые необходимо отфильтровать и сравнить друг с другом перед желаемым выводом. Могу ли я просто присвоить внешнему запросу имя? Каковы мои альтернативы? Спасибо.

1 Ответ

0 голосов
/ 02 октября 2019

Я не совсем понимаю смысл вашего существующего запроса, но вы можете «сохранить» подзапросы в виде CTE (Common Table Expressions) и назвать их. В последующих запросах вы можете ссылаться на них, как если бы они были типичными таблицами. Например:

with
z (username) as ( -- CTE named "z"
  SELECT UPPER(U.USERNAME) FROM USERS U WHERE TEAM = 'DATA'
),
edits (dt, username, business, newname, reason) as ( -- CTE named "edits"
   SELECT
     L.DATE,
     UPPER(L.USERNAME),
     L.BUSINESS,
     (SELECT name FROM UID where UID_code = L.transfer),
     L.REASON
     FROM LOGS L
     WHERE L.APPLICATION = 'A'
       AND L.BUSINESS IN ('X','Y','Z')
       AND L.DATE BETWEEN TO_DATE('1/1/2019 00:00:01', 'MM/DD/YYYY HH24:MI:SS') 
                      AND TO_DATE('2/1/2019    23:59:59','MM/DD/YYYY HH24:MI:SS')
       AND UPPER(L.USERNAME) IN (SELECT * from z WHERE REASON = 'N/A')
)
select * from edits

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

...