Nouvelle colonne avec la moyenne par date dans SQL Server

J'ai cette table:

OrganizationCode | CreatedDate | TotalCost 102 | 2015-05-18 00:00:00.000 | 200 102 | 2015-05-18 00:00:00.000 | 550 102 | 2015-05-15 00:00:00.000 | 700 102 | 2015-05-15 00:00:00.000 | 1200 103 | 2015-01-27 00:01:12.720 | 1275,46 103 | 2015-01-27 00:01:12.720 | 1275,46 103 | 2015-01-27 00:01:12.720 | 1275,46 

Et j'ai besoin d'append deux colonnes:

Moyenne quotidienne = sum des valeurs par date

Montant quotidien = Montant par date

Je veux le résultat ci-dessous:

 OrganizationCode | CreatedDate | TotalCost | Daily Average | Daily Amount -----------------|------------------|-----------|---------------|-------- 102 | 2015-05-18 00:00 | 200 | 375 | 2 102 | 2015-05-18 00:00 | 550 | 375 | 2 102 | 2015-05-15 00:00 | 700 | 950 | 2 102 | 2015-05-15 00:00 | 1200 | 950 | 2 103 | 2015-01-27 00:01 | 1275,46 | 1275,46 | 3 103 | 2015-01-27 00:01 | 1275,46 | 1275,46 | 3 103 | 2015-01-27 00:01 | 1275,46 | 1275,46 | 3 

J'essaie cette requête:

  SELECT OrganizationCode , CreatedDate , (SELECT avg(TotalCost) AS x FROM #TempLocalOrg Group By CAST(CreatedDate as date)) FROM #TempLocalOrg 

Pas de succès, le sous-sélection fonctionne, mais j'ai besoin de dupliquer les résultats

La meilleure façon de le faire serait d'utiliser les fonctions de la window:

 SELECT OrganizationCode, CreatedDate , AVG(TotalCost) OVER ( PARTITION BY CreatedDate ) AS [Daily Average] , COUNT(*) OVER ( PARTITION BY CreatedDate ) AS [Daily Amount] FROM #TempLocalOrg; 

Ce qui précède suppose que les dates sont arrondies ou tronquées au jour le plus proche.

 SELECT OrganizationCode , CreatedDate , TotalCost , aggregates.AvgCost AS 'Daily Average ' , aggregates.CountCost AS 'Daily Amount' FROM #TempLocalOrg tmp CROSS APPLY ( SELECT AVG(TotalCost) as AvgCost ,COUNT(1) AS CountCost FROM #TempLocalOrg crossTemp WHERE CAST(tmp.CreatedDate as date) = CAST(crossTemp.CreatedDate as date) ) aggregates 

Comme vous n'aviez pas besoin de regrouper les valeurs, nous ne pouvions pas utiliser group by. Au lieu de cela, j'ai utilisé une APPLICATION CROISEE pour faire correspondre la Date de chaque ligne et agréger ses résultats, afin de l'appliquer à chaque ligne distincte de ligne. N'hésitez pas à me contacter si vous avez besoin d'éclaircissements sur quoi que ce soit.