ho creato la seguente stored procedure che viene utilizzato per contare il numero di record al giorno tra una gamma specifica per una posizione selezionata:Conte SQL per includere i valori zero
[dbo].[getRecordsCount]
@LOCATION as INT,
@BEGIN as datetime,
@END as datetime
SELECT
ISNULL(COUNT(*), 0) AS counted_leads,
CONVERT(VARCHAR, DATEADD(dd, 0, DATEDIFF(dd, 0, Time_Stamp)), 3) as TIME_STAMP
FROM HL_Logs
WHERE Time_Stamp between @BEGIN and @END and ID_Location = @LOCATION
GROUP BY DATEADD(dd, 0, DATEDIFF(dd, 0, Time_Stamp))
ma il problema è che il risultato non mostra i giorni in cui ci sono zero record, sono abbastanza sicuro che abbia qualcosa a che fare con la mia dichiarazione WHERE che non permette di mostrare i valori zero ma non so come superare questo problema.
Grazie in anticipo Neil
Se si rimuove l'aggregazione si ottiene di nuovo le righe che ci si aspetta? –
Come gli altri hanno pubblicato, è necessario un elenco effettivo dei giorni, in primo luogo (preferisco un file di calendario permanente me stesso - sono particolarmente utili se il calendario fiscale di un'azienda non coincide con il calendario locale standard). Tuttavia, per favore ** mai ** usa 'BETWEEN', _especially_ per i valori di data/ora/data/ora. Il nostro stesso Aaron Bertrand ha un [post di blog] (http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common. aspx) sui problemi particolari che SQL Server ha quando utilizza questa clausola. –