2011-10-05 7 views
11

Sto scrivendo una pagina Web per filtrare in modo interattivo i risultati in base ai criteri del filtro specificati dall'utente. Voglio solo restituire da SQL le prime 20 righe, ma voglio sapere quante righe hanno soddisfatto i criteri (Count). Voglio essere in grado di dire all'utente: "qui ci sono le prime 20 righe che corrispondono ai tuoi criteri e, a proposito, ci sono state 2.000 righe aggiuntive che non mostro qui".Come si seleziona TOP x ma si ottiene comunque un COUNT dell'intera query?

So che potrei semplicemente eseguire la query due volte ma EWWWW è costoso e dispendioso. Come posso ottenere ciò che voglio senza dover tassare il database?

risposta

22

È possibile utilizzare COUNT(*) OVER()

SELECT TOP 20 *, 
     COUNT(*) OVER() AS TotalMatchingRows 
FROM master..spt_values 
WHERE type='P' 
ORDER BY number 

Facendo due query può funzionare più efficiente ma soprattutto se si hanno gli indici più strette che possono essere utilizzati per determinare il numero di riga corrispondente, ma non coprono l'intero elenco SELECT.

+1

Sono un idiota, sei un maestro zen. :-) Adoro gli esperti di SQL, senza fronzoli, solo fatti. Grazie, Martin. – kingdango

+0

Puoi chiarire come faresti con due domande? –

Problemi correlati