2017-10-15 36 views
0

我有列值“DateThru”,其日期值根据数据库更新日而变化。我有几个表内部join'd,我试图得到一个列(Alloc)的总和,直到“DateThru”日期。我试图限制使用基于活动日期的列中的SQL总和行数

where ActivityDate <='DateThru' 

但是我收到服务器错误任何时候我尝试在哪里条款。

我从拉看起来像这样

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 .
    x  2017-10-07 .0248 

说 “DateThru” 表是2017年10月5日。 我想要将Alloc从10-1加到10-5,从而给出“.122”的结果作为MTDAlloc。

这可以做为一个“Windows功能”或在哪里条款?
谢谢!

我用求和分区获得总

我总的工作和正确组织。我的问题是现在我有每个“r”重复的条目。所以当我将ActiveDate < = DateThru更改为“=”时,它修复了我的重复问题,但不会累计MTDAlloc。我确实使用“总和列”来创建另一个列表,因此我无法使用rownumber()等级来删除重复项。

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 

真的很感谢帮助!

+0

您能否显示您的MTDAlloc列的预期结果? – Harry

+0

如果你想要的是一个Alloc的总和..那么应该是像 从你的表组中按月份,代表选择月份,代表,目标,总和(Alloc) 或我缺少别的东西吗? – Harry

+0

我使用了分区总和!只是现在有一个重复的问题doe到<= where子句。 –

回答

0

您的问题可能只是单引号。从你所描述的,这应该工作:

where ActivityDate <= DateThru 

单引号使值为字符串。与日期的比较使得SQL Server希望将其转换为日期。并且'DateThru'未被识别为有效日期。

编辑:

我的猜测是,尽管它的名字,DateThru确实是一个字符串。您可以使用以下方式查找违规值:

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

我试过了,我仍然继续得到externaldata_1错误。如果我设置ActivityDate ='2017-10-05'它只适用于该日期。 –

+0

@MattMcDermott。 。 。这表明'DateThru'是一个字符串表示 - 并不是所有的值都是有效日期。 –