我有4个oracle SQL查询,我希望在一个结果中包含这些查询

我有4个oracle SQL查询,我希望在一个结果中包含这些查询,sql,oracle,Sql,Oracle,这4个查询生成所需的结果,但是我想将这些查询包装成一个查询,该查询将每个查询作为水平列返回,并垂直返回相应的查询结果 我已将所有查询限制为rownum通过其rownum连接它们记住别名rownum select * from ( SELECT rownum rownr, a.* FROM (SELECT count(tl.usr) as "Antall oppslag" FROM TABLE tl WHERE tl.timestamp >= (sysdate - (1/24)) GRO

这4个查询生成所需的结果,但是我想将这些查询包装成一个查询,该查询将每个查询作为水平列返回,并垂直返回相应的查询结果


我已将所有查询限制为rownum通过其rownum连接它们记住别名rownum

select * from 
(
SELECT rownum rownr, a.* FROM (SELECT count(tl.usr) as "Antall oppslag" FROM TABLE tl WHERE 
tl.timestamp >= (sysdate - (1/24)) GROUP BY tl.usr ORDER BY count(tl.usr) desc) a WHERE 
rownum <= 20
) a,
(
SELECT rownum rownr, b.* FROM (SELECT count(tl.usr) as "Antall oppslag" FROM TABLE tl WHERE 
tl.timestamp >= (sysdate - (1)) GROUP BY tl.usr ORDER BY count(tl.usr) desc) b WHERE 
rownum <= 20
) b, 
(
SELECT rownum rownr, c.* FROM (SELECT count(tl.usr) as "Antall oppslag" FROM TABLE tl WHERE 
tl.timestamp >= (sysdate - (7)) GROUP BY tl.usr ORDER BY count(tl.usr) desc) c WHERE 
rownum <= 20
) c,
(
SELECT  rownum rownr, d.* FROM (SELECT count(tl.usr) as "Antall oppslag" FROM TABLE tl WHERE 
tl.timestamp >= (sysdate - (30)) GROUP BY tl.usr ORDER BY count(tl.usr) desc) d WHERE 
rownum <= 20
) d
where a.rownr = b.rownr 
and a.rownr = c.rownr
and a.rownr = d.rownr

啊,这看起来很完美。在我接受答案之前,让我试一试。很不错的。实际上我以前做过一个非常类似的查询,但是我忘记了a.rownum=b.rownum等等,所以我得到了一个非常糟糕的结果。实际上表引用在子查询中。它是否可以从子查询外部引用?我得到的错误是表a、b、c、d不存在。更具体地说,它是无效的user.table.column、table.column或我所说的a.rownum=b行上的列规范。rownum@Karrax:我认为您应该为rownum使用别名,例如:SELECT rownum rwnum。。。。。。。其中a.rwnum=b。rwnum@JensSchauder,抱歉,a*似乎不起作用。由于某种原因,我无法从子查询检索数据。我不断收到错误消息,a是无效标识。您应该能够使用完整的外部连接和有点复杂的连接条件,或者使用数字1到20的附加表来执行此操作:从选择级别x选择*从双连接级别
select * from 
(
SELECT rownum rownr, a.* FROM (SELECT count(tl.usr) as "Antall oppslag" FROM TABLE tl WHERE 
tl.timestamp >= (sysdate - (1/24)) GROUP BY tl.usr ORDER BY count(tl.usr) desc) a WHERE 
rownum <= 20
) a,
(
SELECT rownum rownr, b.* FROM (SELECT count(tl.usr) as "Antall oppslag" FROM TABLE tl WHERE 
tl.timestamp >= (sysdate - (1)) GROUP BY tl.usr ORDER BY count(tl.usr) desc) b WHERE 
rownum <= 20
) b, 
(
SELECT rownum rownr, c.* FROM (SELECT count(tl.usr) as "Antall oppslag" FROM TABLE tl WHERE 
tl.timestamp >= (sysdate - (7)) GROUP BY tl.usr ORDER BY count(tl.usr) desc) c WHERE 
rownum <= 20
) c,
(
SELECT  rownum rownr, d.* FROM (SELECT count(tl.usr) as "Antall oppslag" FROM TABLE tl WHERE 
tl.timestamp >= (sysdate - (30)) GROUP BY tl.usr ORDER BY count(tl.usr) desc) d WHERE 
rownum <= 20
) d
where a.rownr = b.rownr 
and a.rownr = c.rownr
and a.rownr = d.rownr