sql >> Databasteknik >  >> RDS >> Sqlserver

Returnera två resultatuppsättningar när du använder WITH TempResults AS

Detta kan inte göras (såvitt jag är medveten om). Det finns tre lösningar, en som låter dig behålla som två distinkta resultatuppsättningar och de andra två som kräver att resultaten slås samman till samma resultatuppsättning (som antingen en extra rad eller en extra kolumn).

  1. Istället för en CTE, tryck in resultaten i en tillfällig tabell och fråga sedan från den.
  2. Slå samman antalet till den faktiska resultatuppsättningen som en annan rad:använd en UNION ALL och ge räkneraden lämpliga värden för ID, Name och RowID så att du kan extrahera den från resten av data
  3. Lägg till SELECT COUNT(*) i den primära resultatuppsättningen som en extra kolumn med en CROSS JOIN eller liknande.

För det senare kan du göra det genom att ändra din primära fråga till:

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

Jag kan inte garantera prestationen - du måste profilera dig.



  1. SUM-funktionen läggs inte till korrekt

  2. Hur fungerar det med en PostgreSQL-databas med Docker och Flask?

  3. Vad är det som skickar parametrar till SQL och varför behöver jag det?

  4. mysql concat_ws utan dubbletter