簡體   English   中英

基於活動日期的列中的SQL總和行

[英]SQL Sum rows in column based on active date

我有列值“ DateThru”,其日期值根據數據庫更新日而改變。 我有一些表內部join'd,我正在嘗試獲取直到“ DateThru”日期為止的列(Alloc)的總和。 我嘗試使用限制表

  where ActivityDate <='DateThru'

但是我每次在where子句中嘗試時都會收到服務器錯誤。

我從中拉出的桌子是這樣的

    Month  ActivityDate  Alloc
    ---------------------------
     x     2017-10-01    .0238
     x     2017-10-02    .0302
     x     2017-10-03    .0156
     x     2017-10-04    .0200
     x     2017-10-05    .0321
     x     2017-10-06    .0123
     x     2017-10-07    .0248

假設“ DateThru”是2017-10-05。 我想將分配給“ .122”的結果從10-1匯總到10-5,作為MTDAlloc。

可以將其作為“ Windows函數”或在where子句中完成嗎?
謝謝!

我用總和超過分區來獲得總數

我有總的工作和正確的組織。 我的問題是,現在我對每個“ r”都有重復的條目。 因此,當我將ActiveDate <= DateThru更改為僅“ =”時,它解決了我的重復問題,但未總計MTDAlloc。 我確實使用“求和列”來創建另一個,所以我不能使用rownumber()rank刪除重復項。

    Month  rep  goal  MTDAlloc
    ----------------------
    x    r1    20    .122          
    x    r1    20    .122  
    x    r1    20    .122          
    x    r2    20    .122
    x    r2    20    .122        
    x    r2    20    .122

最終結果將在一行中包含每個唯一的“ r”。

    Month  rep  goal  Alloc
    ----------------------
    x    r1    20    .122         
    x    r2    20    .122 

真的很感謝您的協助!

您的問題可能只是單引號。 根據您的描述,這應該有效:

where ActivityDate <= DateThru

單引號使值成為字符串。 與日期的比較使SQL Server希望將其轉換為日期。 並且'DateThru'未被識別為有效日期。

編輯:

我的猜測是,盡管名稱如此, DateThru確實是一個字符串。 您可以使用以下方法找到有問題的值:

select DateThru
from . . .
where try_convert(datetime, DateThru) is null;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM