SQL按日期循环表并对值求和

时间:2015-07-02 14:36:32

标签: sql sql-server sql-server-2008

我有一个只有几列的表格:

BUS_DATE      VALUE         EXP_DATE
6/29/2015     60            6/29/2015
6/30/2015     100           6/30/2015
6/30/2015     50            6/30/2015
6/30/2015     25            7/1/2015
7/1/2015      75            7/1/2015

我只是在寻找如何循环遍历表中的每个[BUS_DATE]并使用[EXP_DATE]逻辑将[VALUE]与其进行对比

FOR EACH @BUS_DATE
     INSERT BUS_DATE, SUM(VALUE) 
     INTO #tmp 
     FROM TABLE 
     WHERE (
           BUS_DATE = @BUS_DATE 
           OR 
          (@BUS_DATE > BUS_DATE AND @BUS_DATE <= EXP_DATE)
          ) 
NEXT

最终,我希望输出看起来像这样:

BUS_DATE     VALUE
6/29/2015    60 
6/30/2015    175
7/1/2015     100

提前非常感谢你!

4 个答案:

答案 0 :(得分:2)

这是一个简单的GROUP BY查询:

SELECT BUS_DATE, SUM(VALUE) AS VALUE
FROM MyTable
GROUP BY BUS_DATE

如果您想将结果存储在#tmp表中,请使用insert from select语法。

答案 1 :(得分:1)

如果我理解你的问题:

您计算了BUS_DATESELECT DISTINCT BUS_DATE FROM TABLE)的列表。 每个现有的BUS_DATE都会出现一次。

您根据EXP_DATE逻辑将原始表格加入该列表。

SELECT lst.BUS_DATE
     , val = SUM(VALUE) 
INTO #tmp 
FROM ( SELECT DISTINCT BUS_DATE FROM TABLE ) lst
JOIN TABLE dat
  ON ( lst.BUS_DATE = dat.BUS_DATE )
       OR 
     ( lst.BUS_DATE > dat.BUS_DATE AND lst.BUS_DATE <= dat.EXP_DATE )
GROUP BY lst.BUS_DATE

答案 2 :(得分:0)

更新: 现在,这只是EXP_DATE&gt;时的值的总和。 BUS_DATE

$

答案 3 :(得分:0)

SELECT BUS_DATE, SUM(VALUE) FROM tblName Group By BUS_DATE

在你的情况下......

SELECT BUS_DATE, SUM(VALUE) INTO #tmp FROM TABLE (where exp_date logic here)