2017-11-03 4 views
1

Hier ist meine Abfrage.Zählen Sie alle Zeilen in Verbindung mit Paginierung (OFFSET, FETCH)

SELECT 
     S.Id, 
     S.[Order], 
     COUNT(*) OVER() AS Total_Count --Return 4 
FROM Subscriptions S 
UNION 
SELECT 
     S1.Id, 
     S1.[Order], 
     COUNT(*) OVER() AS Total_Count --return 5 
FROM Subscriptions1 S1 
ORDER BY [Order] DESC 
      OFFSET 0 ROWS 
    FETCH NEXT 2 ROWS ONLY 

Was ich will, ist 9 (4 + 5) in jeder Zeile.

Antwort

2

Verwenden einer Unterabfrage:

SELECT id, [Order], COUNT(*) OVER() AS Total_Count 
FROM ((SELECT S.Id, S.[Order], 
     FROM Subscriptions S 
    ) UNION 
     (SELECT S1.Id, S1.[Order] 
     FROM Subscriptions1 S1 
    ) 
    ) s 
ORDER BY [Order] DESC 
OFFSET 0 ROWS 
FETCH NEXT 2 ROWS ONLY; 

Hinweis: Nur UNION verwenden, wenn Sie den Aufwand für das Entfernen von Dubletten entstehen soll. Andernfalls verwenden Sie UNION ALL.

+0

Ich habe 30 Spalten in jeder Tabelle, die ich in Select-Anweisung habe. – abhi

+0

Und ich denke '((S.Id, S. [Auftrag], VON Abonnements S ) UNION (SELECT S1.Id, S1. [Auftrag] VON Subscriptions1 S1 ) SELECT)' wird mehr Zeit in Anspruch nehmen weil es keinen Offset und Fetch hat. Es werden alle Datensätze abgerufen. – abhi

+0

@abh. . . Nicht wirklich. Ihre ursprüngliche Abfrage liest alle Daten und entfernt dann die Duplikate. Eine Menge Arbeit ist bereits passiert. –

Verwandte Themen