表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
考勤人数 单位编号 考勤时间
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
from 表2 a
left join 表1 b
on a.考勤时间>=b.发放日期
group by b.单位编号,a.工资发放日期?
tb1.单位编号,
工资发放日期=发放日期,
考勤人数=SUM(考勤人数)
from tb1 join tb2 on tb1.单位编号=tb2.单位编号
and tb1.考勤时间>tb2.发放日期
group by tb1.单位编号,发放日期
-- 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 行受影响)
*/
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 行受影响)
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 行受影响)
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*/