2012-03-24 105 views
0

这4个查询产生所需的结果,但我想把这些查询包装成一个查询,返回每个查询作为水平列与垂直相应的查询结果。我有4个oracle SQL查询,我想要在一个结果

我有限的所有查询到ROWNUM < = 20

SELECT * 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) WHERE 
rownum <= 20; 

SELECT * 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) WHERE 
rownum <= 20; 

SELECT * 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) WHERE 
rownum <= 20; 

SELECT * 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) WHERE 
rownum <= 20; 

人对如何做到这一点有什么建议?

编辑:我想指定我不希望结果在彼此之上。不同的查询必须是水平列,而他们各自的结果去vertically.a

回答

2

通过他们的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 
+0

啊这个看起来很完美。让我在接受答案之前试用一下。非常好。我之前做了一个非常类似的查询,但我忘记了a.rownum = b.rownum等等,所以我得到了一个非常糟糕的结果。 – 2012-03-24 15:30:12

+0

实际上表引用是在子查询中。它是否可以从子查询之外引用?我得到的错误表a,b,c,d不存在。更具体地说,它是在无效的user.table.column,table.column,或列规范“,我说a.rownum = b.rownum – 2012-03-24 15:43:21

+1

@Karrax:我认为你应该使用别名为rownum例如:'SELECT rownum rwnum' .......其中a.rwnum = b.rwnum – 2012-03-24 15:50:19

相关问题