【问题标题】:SQL Sum rows in column based on active dateSQL Sum 基于活动日期的列中的行
【发布时间】:2018-03-27 07:40:45
【问题描述】:

我有一个列值“DateThru”,它的日期值会根据数据库更新日期而变化。我有几个表内部连接,我试图得到一个列(Alloc)的总和,直到“DateThru”日期。我尝试使用

限制表格
  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。 我想将 Alloc 从 10-1 加到 10-5,给出“.122”的结果作为 MTDAlloc。

这可以作为“windows 函数”或在 where 子句中完成吗?
谢谢!

我使用 sum over partition 来得到总数

我有正确的工作和组织。我的问题是现在每个“r”都有重复的条目。因此,当我将 ActiveDate

    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 

非常感谢您的帮助!

【问题讨论】:

  • 您能否显示您的 MTDAlloc 列的预期结果?
  • 如果你想要的只是 Alloc 的总和.. 那么它应该是像 Select Month, rep,goal, sum(Alloc) from your table group by month, rep, goal 还是我错过了还有什么?
  • 我是通过分区求和得到的!现在只是对
  • 你能显示你的查询吗?
  • 使用查询编辑的帖子

标签: sql sql-server


【解决方案1】:

您的问题可能只是单引号。根据您的描述,这应该可行:

where ActivityDate <= DateThru

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

编辑:

我的猜测是,尽管有它的名字,DateThru 实际上是一个字符串。您可以使用以下方法找到违规值:

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

【讨论】:

  • 我已经尝试过并且我继续收到 externaldata_1 错误。如果我设置 ActivityDate ='2017-10-05' 它只适用于那个日期。
  • @MattMcDermott 。 . .这表明DateThru 是一个字符串表示形式——并非所有值都是有效日期。
猜你喜欢
  • 2020-04-21
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多