[英]Can I pass SQL queries and their subqueries without creating separate tables?
给定以下代码,是否可以在不创建表的情况下将查询及其子查询传递给稍后的计算(具有一些算术的 pivot 表)?
表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) 在所需的 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.