从2个表填充数据集(生效日期逻辑)_simplified_

时间:2014-08-14 18:48:08

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

我有2张桌子,我试图弄清楚把它放在一起的最好方法。下面是表A,表B和我想要实现的结果:

TABLE A
[THE_DATE]  

1/8         
1/10        
2/1         
2/15        
3/1         
3/30        
4/23        


TABLE B
[SOURCE]        [VALUE]     [EFFECTIVE_DT_ST]       [EFFECTIVE_DT_END]

John            25,000      1/1                     3/10
Bill            10,000      1/1                     2/18
Jack             5,000      2/10                    3/31
Tom             12,000      2/20                    12/31/2999
ALL             50,000      4/1                     12/31/2999


RESULTS
DATE     VALUE_SUM

1/8      35,000     (john+bill)
1/10     35,000     (john+bill)
2/1      35,000     (john+bill)
2/15     40,000     (john+bill+jack)
3/1      42,000     (john+jack+tom)
3/30     17,000     (jack+tom)  
4/23     50,000     (all)

我尝试实现的psuedo代码:

FOR EACH [THE_DATE] IN TABLE A GET [VALUE] FROM TABLE B

IF [THE_DATE] < SELECT MIN(EFFECTIVE_DT_ST) FROM TABLEB WHERE SOURCE = 'ALL')

    SUM(VALUE) WHERE [THE_DATE] > EFFECTIVE_DT_ST AND [THE_DATE] < EFFECTIVE_DT_END 
            AND SOURCE <> 'ALL'

ELSE

    VALUE WHERE [THE_DATE] [THE_DATE] > EFFECTIVE_DT_ST AND [THE_DATE] < EFFECTIVE_DT_END
            AND SOURCE = 'ALL'

感谢先生,我们非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

我相信你想要这样的东西:

SELECT A.THE_DATE, SUM(B.VALUE) AS VALUE_SUM
FROM A
    INNER JOIN B ON
        B.EFFECTIVE_DT_ST <= A.THE_DATE AND
        B.EFFECTIVE_DT_END >= A.THE_DATE

GROUP BY A.THE_DATE 

将所有A.THE_DATE值与A.THE_DATE存在的任何帐户相关联的广告素材联接。您不一定需要主键/外键来连接两个表。

当然,你要对B.VALUE求和,所以你必须在A.THE_DATE进行分组。

如果你没有全部&#39;将表格排成行,您可以通过将WITH ROLLUP添加到GROUP BY来汇总值,以获得总和的底行。要在该行中获得良好的A.THE_DATE值(而不是null),请在SELECT语句中执行此操作:IFNULL(A.THE_DATE,&#34;所有日期&#34;)

我假设您的日期存储为SQL DATE格式。您可以在SELECT语句中格式化它们。

如果有帮助,请告诉我。