2012-03-24 4 views
0

Diese 4 Abfragen produzieren das gewünschte Ergebnis, jedoch möchte ich diese Abfragen in eine Abfrage umwandeln, die jede Abfrage als horizontale Spalte mit den entsprechenden Abfragen Ergebnis vertikal zurückgeben.Ich habe 4 Oracle SQL-Abfragen, die ich in einem Ergebnis haben möchte

Ich habe alle Anfragen beschränkt auf rownum haben < = 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; 

Wer noch keine Vorschläge, wie dies zu tun?

EDIT: Ich möchte angeben, dass ich nicht die Ergebnisse übereinander wollen. Die verschiedenen Anfragen hat horizontale Spalten sein, während ihre jeweiligen Ergebnisse gehen vertically.a

Antwort

2

Mitglied werden sie durch ihre rownum (denken Sie daran, alias 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

Ahh das sieht perfekt. Lass es mich ausprobieren, bevor ich die Antwort akzeptiere. Sehr schön. Ich habe vorher eine ähnliche Abfrage gemacht, aber ich habe das a.rownum = b.rownum und so weiter vergessen, also bekam ich ein sehr schlechtes Ergebnis. –

+0

tatsächlich ist die Tabellenreferenzen innerhalb der Unterabfragen. Kann es von außerhalb der Unterabfragen referenziert werden? Ich bekomme Fehler, dass die Tabellen a, b, c, d nicht existieren. Genauer gesagt heißt es "ungültige user.table.column, table.column oder column specification" in der Zeile, in der ich a.rownum = b.rownum sage –

+1

@Karrax: Ich denke, du solltest einen Alias ​​für rownum verwenden, zB: 'SELECT rownum rwnum' ....... wo a.rwnum = b.rwnum –

Verwandte Themen