Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zwróć dwa zestawy wyników przy użyciu WITH TempResults AS

Nie da się tego zrobić (o ile mi wiadomo). Istnieją trzy obejścia, jedno, które pozwala zachować dwa różne zestawy wyników, a pozostałe dwa wymagają scalenia wyników w ten sam zestaw wyników (jako dodatkowy wiersz lub dodatkowa kolumna).

  1. Zamiast CTE, umieść wyniki w tabeli tymczasowej, a następnie zapytaj z niej.
  2. Połącz liczbę z rzeczywistym zestawem wyników jako inny wiersz:użyj UNION ALL i nadaj wierszowi licznika odpowiednie wartości dla ID, Name i RowID, aby można było wyodrębnić je z pozostałych danych
  3. Dodaj SELECT COUNT(*) do podstawowego zestawu wyników jako dodatkowa kolumna z CROSS JOIN lub podobne.

W tym drugim przypadku możesz to zrobić, zmieniając podstawowe zapytanie na:

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);

Nie mogę ręczyć za wydajność – musisz profilować.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak naprawić konflikt sortowania w zapytaniu SQL Server?

  2. Automatyczne kopie zapasowe programu SQL Server

  3. Instalacja klastra pracy awaryjnej serwera SQL -4

  4. Replikacja programu SQL Server 2008 nie powiodła się z powodu:proces nie mógł wykonać „sp_replcmds”

  5. Jak ustawić wartość zmiennej za pomocą „wykonaj” w t-sql?