2017-05-24 1 views
0


Ich habe eine Frage bezüglich der Verwendung von Offset abhängig davon, wie viele Zeilen zurückgegeben. Ich benutze Oracle 12c.Oracle Offset Abruf als optional

Hier ist Beispiel meiner allzu vereinfachter query:

SELECT COUNT (*) OVER() insgesamt, Name, Fullname
FROM Person
ORDER BY Name
Offset 2 Reihen
holen nächste Nur 3 Zeilen

was ich erreichen will ist, dass der Offset und Fetch nur durchgeführt werden soll, wenn insgesamt größer als x (zB 100)

Ich habe dies versucht, aber es ist keine gültige Abfrage

SELECT COUNT (*) OVER() insgesamt, Name, fullname
FROM Person
ORDER BY name
CASE (total> 100) THEN (Versatz 2 Reihen
fetch nächsten 3 Reihen nur)

Thx vor

Antwort

0

Ich denke, vielleicht sollten Sie row_number() statt:

WITH p AS (
     SELECT COUNT(*) OVER() as total, name, fullname, 
      ROW_NUMBER() OVER (ORDER BY name) as seqnum 
     FROM person p 
    ) 
SELECT p.total, p.name, p.fullname 
FROM p 
WHERE (total > 100 AND seqnum BETWEEN 3 AND 5) OR 
     (total <= 100 AND seqnum <= 3) 
ORDER BY name ; 
+0

Große, es funktioniert, ich danke Ihnen sehr viel – tyrion