表1:
考勤人数     单位编号     考勤时间
4             d01         2010-03-19
5             d01         2010-04-18
2             d02         2010-04-21表2
工资发放总金额     发放日期    单位编号
30000              2010-03-10    d01
20000              2010-04-15    d01
30000              2010-04-22    d02我想查询截止工资发放日期的考勤人数。 想要结果:单位编号 工资发放日期 考勤人数
 d01     2010-03-10     0
 d01     2010-04-15     4
 d02     2010-04-01     11

解决方案 »

  1.   

    select b.单位编号,a.工资发放日期,sum(isnull(b.考勤人数,0))
    from 表2 a
    left join 表1 b
    on a.考勤时间>=b.发放日期
    group by b.单位编号,a.工资发放日期?
      

  2.   

    select 
    tb1.单位编号,
     工资发放日期=发放日期,
     考勤人数=SUM(考勤人数)
    from tb1  join tb2 on tb1.单位编号=tb2.单位编号
    and tb1.考勤时间>tb2.发放日期
    group by tb1.单位编号,发放日期
      

  3.   

    ----------------------------------------------------------------
    -- Author  :SQL77(只为思齐老)
    -- Date    :2010-04-23 14:14:44
    -- Version:
    --      Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) 
    -- Oct 14 2005 00:33:37 
    -- Copyright (c) 1988-2005 Microsoft Corporation
    -- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
    --
    ----------------------------------------------------------------
    --> 测试数据:#1
    if object_id('tempdb.dbo.#1') is not null drop table #1
    go 
    create table #1([考勤人数] int,[单位编号] varchar(3),[考勤时间] datetime)
    insert #1
    select 4,'d01','2010-03-19' union all
    select 5,'d01','2010-04-18' union all
    select 2,'d02','2010-04-21'
    --> 测试数据:#2
    if object_id('tempdb.dbo.#2') is not null drop table #2
    go 
    create table #2([工资发放总金额] int,[发放日期] datetime,[单位编号] varchar(3))
    insert #2
    select 30000,'2010-03-10','d01' union all
    select 20000,'2010-04-15','d01' union all
    select 30000,'2010-04-22','d02'
    --------------开始查询--------------------------select 
    b.[单位编号],
    b.[发放日期],
    isnull((select sum( [考勤人数]) from #1 where  [考勤时间]<=b.[发放日期]),0) num
     from #2 b
    ----------------结果----------------------------
    /* (3 行受影响)(3 行受影响)
    单位编号 发放日期                    num
    ---- ----------------------- -----------
    d01  2010-03-10 00:00:00.000 0
    d01  2010-04-15 00:00:00.000 4
    d02  2010-04-22 00:00:00.000 11(3 行受影响)
    */
      

  4.   

    select distinct a.单位编号,a.发放日期,sum(isnull(b.考勤人数,0)) over(partition by 发放日期)
    from #tb2 a
    left join #tb1 b
    on a.发放日期>=b.考勤时间 单位编号       发放日期                               
    ---------- ----------------------- -----------
    d01        2010-03-10 00:00:00.000           0
    d01        2010-04-15 00:00:00.000           4
    d02        2010-04-22 00:00:00.000          11(3 行受影响)
      

  5.   

    select distinct a.单位编号,a.发放日期,sum(isnull(b.考勤人数,0)) 
    from #tb2 a
    left join #tb1 b
    on a.发放日期>=b.考勤时间 
    group by a.发放日期,a.单位编号单位编号       发放日期                               
    ---------- ----------------------- -----------
    d01        2010-03-10 00:00:00.000           0
    d01        2010-04-15 00:00:00.000           4
    d02        2010-04-22 00:00:00.000          11(3 行受影响)
      

  6.   

    --> 测试数据:#1
    if object_id('tempdb.dbo.#1') is not null drop table #1
    go 
    create table #1([考勤人数] int,[单位编号] varchar(3),[考勤时间] datetime)
    insert #1
    select 4,'d01','2010-03-19' union all
    select 5,'d01','2010-04-18' union all
    select 2,'d02','2010-04-21'
    --> 测试数据:#2
    if object_id('tempdb.dbo.#2') is not null drop table #2
    go 
    create table #2([工资发放总金额] int,[发放日期] datetime,[单位编号] varchar(3))
    insert #2
    select 30000,'2010-03-10','d01' union all
    select 20000,'2010-04-15','d01' union all
    select 30000,'2010-04-22','d02'
    --------------开始查询--------------------------select a.[单位编号],a.[发放日期],isnull(sum([考勤人数]),0) from #2  a
    left join #1 b
    on  a.[发放日期]>b.[考勤时间]
    group by a.[单位编号],a.[发放日期]
    /*
    单位编号 发放日期                    
    ---- ----------------------- -----------
    d01  2010-03-10 00:00:00.000 0
    d01  2010-04-15 00:00:00.000 4
    d02  2010-04-22 00:00:00.000 11*/