Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Retorna dois conjuntos de resultados ao usar WITH TempResults AS


Isso não pode ser feito (até onde eu sei). Há três soluções alternativas, uma que permite manter dois conjuntos de resultados distintos e as outras duas que exigem mesclar os resultados no mesmo conjunto de resultados (como uma linha extra ou uma coluna extra).
  1. Em vez de uma CTE, envie os resultados para uma tabela temporária e faça uma consulta a partir dela.
  2. Mescle a contagem no conjunto de resultados real como outra linha:use um UNION ALL e dê à linha de contagem valores adequados para ID, Nome e RowID para que você possa extraí-lo do restante dos dados
  3. Adicione o SELECT COUNT(*) no resultado primário definido como uma coluna extra com um CROSS JOIN ou similar.

Para este último, você pode fazer isso alterando sua consulta primária para:
SELECT Id, Name, RowId, countTable.totalRows
    FROM ResultsTemp
        CROSS JOIN (SELECT COUNT(*) AS totalRows FROM ResultsTemp) AS countTable
    GROUP BY Id, Name, RowId 
    HAVING RowId BETWEEN @StartRow and (@StartRow + @MaxRows);

Eu não posso garantir o desempenho - você precisa de perfil.