A表结构
ID DATE          A1
201 2010/09/22 1
202 2010/09/25 5
554 2010/09/26 3
558 2010/09/27 2
B表结构DATE          B1
2010/09/22 1
2010/09/23 2
2010/09/24 4
2010/09/25 5
2010/09/26 3
2010/09/27 2
希望得出C表,结果如下:
ID        DATE             A1     B1
201 2010/09/22 1      1
202 2010/09/25 5      11
554 2010/09/26 3      3
558 2010/09/27 2      2
【注:】2010/09/25的B1值为大于2010/09/22并小于等于2010/09/25/之间表B中B1的求和)请教怎么用SQL得出C表的结果(主要是求和)

解决方案 »

  1.   

    --> 测试数据:#a
    if object_id('tempdb.dbo.#a') is not null drop table #a
    create table #a(ID int, DATE datetime, A1 int)
    insert into #a
    select 201, '2010/09/22', 1 union all
    select 202, '2010/09/25', 5 union all
    select 554, '2010/09/26', 3 union all
    select 558, '2010/09/27', 2
    --> 测试数据:#b
    if object_id('tempdb.dbo.#b') is not null drop table #b
    create table #b(DATE datetime, B1 int)
    insert into #b
    select '2010/09/22', 1 union all
    select '2010/09/23', 2 union all
    select '2010/09/24', 4 union all
    select '2010/09/25', 5 union all
    select '2010/09/26', 3 union all
    select '2010/09/27', 2select a.ID, a.DATE, a.A1, sum(b.B1)B1 from #a a, #b b
    where b.DATE between (select isnull(max(DATE)+1,0) from #a where DATE<a.DATE) and a.DATE
    group by a.ID, a.DATE, a.A1
    /*
    ID          DATE                    A1          B1
    ----------- ----------------------- ----------- -----------
    201         2010-09-22 00:00:00.000 1           1
    202         2010-09-25 00:00:00.000 5           11
    554         2010-09-26 00:00:00.000 3           3
    558         2010-09-27 00:00:00.000 2           2
    */
      

  2.   

    还有其他方法吗?
    如果两张表里有多条数据,不能使用union al 吧
      

  3.   

    回复于:2010-10-28 19:19:39还有其他方法吗?
    如果两张表里有多条数据,不能使用union all 吧 
      

  4.   

    当然可以。
    只要查询的类型相同,列名与第一个查询的列名相同。
    union all
    将两个或更多查询的结果合并为单个结果集,该结果集包含联合查询中的所有查询的全部行。UNION 运算不同于使用联接合并两个表中的列的运算。下面列出了使用 UNION 合并两个查询结果集的基本规则:所有查询中的列数和列的顺序必须相同。数据类型必须兼容-- Here is the simple union.
    USE AdventureWorks ;
    GO
    SELECT ProductModelID, Name FROM Production.ProductModel WHERE ProductModelID NOT IN (3, 4)
    UNION
    SELECT ProductModelID, Name FROM dbo.Gloves
    ORDER BY Name ;
    GO