J'ai une requête comme celle-ci:
USE [MyDataBase] GO DECLARE @day DATE = '2017-05-18' DECLARE @camp VARCHAR(500) = '9015'; WITH ODCALLS AS (SELECT * FROM [dbo].[ODCalls_2017_05] WHERE CONVERT(DATE, CallLocalTime) = @day AND LastCampaign = @camp AND CallType = 1 ) SELECT COUNT(*) FROM ODCALLS -- this returns 2998 SELECT DATEPART(HOUR, CallLocalTime) AS dHOUR, COUNT(*) AS [Calls Received] FROM ODCALLS GROUP BY DATEPART(HOUR, CallLocalTime) ORDER BY dHOUR -- this returns 24 rows as there are 24 hours in a day SELECT COUNT(*) FROM ODCALLS -- this returns 2907
L'instance est SQL SERVER EXPRESS 2014 et datatables de la table OdCalls_2017_05
ne changent pas, voici un aperçu des résultats:
Je ne sais pas pourquoi cela arrive, quelqu'un a-t-il une explication?
Merci
Je suis surpris que cela fonctionne du tout. Les expressions de table communes n'agissent pas comme des tables temporaires. La requête est utilisée comme input dans la requête suivante (comme une vue peut), et l'optimization peut être effectuée à la fois sur la requête suivante et le CTE, de sorte qu'un jeu de résultats du CTE peut ne jamais exister seul.
Les appels ultérieurs au CTE ne devraient pas fonctionner, car cela viole la définition d'un CTE. Voir https://blogs.sentryone.com/aaronbertrand/backtobasics-ctes/ pour plus d'informations.