首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于多表查询统计的有关问题

2012-01-05 
关于多表查询统计的问题?有3个表表1编号部门日期1状态10001012007-02-02010002012007-02-06010003022007-0

关于多表查询统计的问题?
有3个表
表1
编号             部门           日期1         状态
10001           01             2007-02-02       0
10002           01             2007-02-06       0
10003           02             2007-02-01       0
10006           02             2007-03-02       0
10001           03             2007-03-01       0
10005           03             2007-03-01       0
………………………
表2
编号             部门           日期2         状态
10003           02             2007-02-10       1
………………………
表3
编号             部门           日期
10001           01             2007-02-03
10002           01             2007-02-10
10003           02             2007-02-06
10006           02             2007-03-02
10001           03             2007-03-01
10005           03             2007-02-22
10005           03             2007-03-02
.......................
要求在2007-02-01至2007-03-03时间段,根据表1的”编号”和”部门”(如果编号重复取日期1最大的),同时编号在表2中不存在,若存在则要求在日期1大于日期2,在表3按部门统计编号数量(不重复)。即得到如下结果:
部门       数量
01               1
02               1
03               2
............
如果表1和表2合并是不是效率更高?(但日期1和日期2分开成2个字段)这时语句又该怎样写?

[解决办法]
若存在则要求在日期1大于日期2,

这句没看懂!
[解决办法]
是不是
select a.部门,
count(a.编号) as 数量 --或者 count(distinct a.编号) as 数量
from 表1 a left join 表2 b
on a.编号=b.编号 and a.部门=b.部门
where b.编号 is null or a.日期1> a.日期2
group by a.部门

表3不知道怎么参与进来,参与进来太乱
[解决办法]
上面不对
select a.部门,
count(a.编号) as 数量 --或者 count(distinct a.编号) as 数量
from (
select * from 表1 x
where not exists (
select 1 from 表1
where 编号=x.编号
and 日期1> x.日期1
)
) as a left join 表2 b
on a.编号=b.编号 and a.部门=b.部门
where b.编号 is null or a.日期1> a.日期2
group by a.部门

[解决办法]
加了条件约束,返回的记录少了,当然就快啦。

热点排行