繁体   English   中英

我可以通过 SQL 查询及其子查询而不创建单独的表吗?

[英]Can I pass SQL queries and their subqueries without creating separate tables?

给定以下代码,是否可以在不创建表的情况下将查询及其子查询传递给稍后的计算(具有一些算术的 pivot 表)?

LOGSUSERS仅共享字段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) 在所需的 output 之前,需要对 3 块这样的代码进行过滤并相互比较。 我可以简单地为外部查询分配一个名称吗? 我的替代方案是什么? 谢谢。

我不太明白您现有查询的含义,但您可以将子查询“保存”为 CTE(公用表表达式)并命名它们。 在以后的查询中,您可以像引用典型表一样引用它们。 例如:

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

这可能会为您的查询提供一个起点。 你的格式不正确,所以我不能很好地理解它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM