2015-05-18 79 views
2

我有這個表:新列按日期平均在SQL Server

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 

,我需要添加兩列:按日期

每日量的值的

日均= SUM =量日期

我想下面的結果:

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 

我嘗試此查詢:

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

沒有sucess,子選擇的作品,但我需要複製的結果

+0

你已經嘗試了一些東西,對不對?有什麼問題?與我們分享您的SQL查詢。 – Bikku

+1

看來日平均值和每日金額的值來自臨時表#TempLocalOrg。你能否將這個表格模式也加入到這個問題中? –

+0

對不起,我的第一篇文章。它包括查詢。 這是一個臨時表,但在這種情況下可以視爲普通表。 –

回答

3

要做到這一點是使用窗口功能的最佳方式:

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

上述假定日期是圓形或截斷爲最近的一天。

+1

如果它們尚未被截斷到日期級別,那麼可以通過cast進行分區(createddate as date) –

0
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 

當你需要不彙總值,我們不能使用通過...分組。 相反,我使用CROSS APPLY來匹配每一行的Date並聚合它的結果,以便將它應用於每一行不同的行。 如果您需要澄清任何事情,請隨時與我聯繫。

+0

謝謝,它工作! –