当前位置: 代码迷 >> Sql Server >> 急时间复合查询,该如何解决
  详细解决方案

急时间复合查询,该如何解决

热度:24   发布时间:2016-04-24 09:36:21.0
急急急急急急急急急急急急急急急急!!!!时间复合查询
本帖最后由 gz5182009 于 2014-12-12 14:37:34 编辑
我想做一个复合查询
现在有两个表结构如下
项目计划表

id    项目 工序 开始日期 结束日期 工号 姓名
1 开化 编辑 2014-11-12 2014-12-19 20140098 汝一
2 开化 编辑 2014-11-12 2014-12-19 20130034 王二
3 开化 编辑 2014-11-12 2014-12-19 20140106 郭三
4 开化 采集 2014-12-12 2014-12-25 20130071 耿五
5 开化 采集 2014-12-12 2014-12-25 20140011 李六
6 开化 采集 2014-12-12 2014-12-25 20130215 路七
7 开化 采集 2014-12-12 2014-12-25 20130144 赵八

人员技能表

工序 工号 姓名
编辑 20140098 汝一
采集 20130034 王二
编辑 20130034 王二
采集 20140106 郭三
编辑 20140106 郭三
采集 20130071 耿五
采集 20140011 李六
采集 20130215 路七
采集 20130144 赵八
编辑 20130145 李九


我想查询出某一天空闲的人员的列表,技能表里面某个人可能会多个工序,所以人名可能有重的。比方说,查询2014-12-20空闲的人员

工号 姓名
20140098 汝一
20130034 王二
20140106 郭三
20130145 李九

------解决思路----------------------
DECLARE @SearchTime DATETIME
SET @SearchTime='2014-12-20'
SELECT 工号,姓名
FROM 人员技能表 T1
WHERE NOT EXISTS(
SELECT 1 FROM 项目计划表 T2
WHERE T1.工号=T2.工号 AND T2.开始日期<=@SearchTime AND T2.结束日期>=@SearchTime
)

------解决思路----------------------
select * from 人员技能表 as a where not exists(select 1 from 项目计划表 where 工号=a.工号 and '2014-12-20' between 开始日期 AND 结束日期)
  相关解决方案