收录日期:2019/10/22 14:26:41 时间:2016/06/04 04:02:00 标签:应用实例
人员基本信息表(A01)

Id   姓名    入职时间       人员类别       身份证号 ……
1    张三   2005-06-11      在职人员       *******  ……
2    李四   2005-06-28      在职人员       *******  ……
3    王五   2005-03-12      离职人员       *******  ……
4    赵六   2005-04-11      在职人员       *******  ……
5    马二   2005-06-28      离职人员 
离职人员表(A02)
Id    离职类型    离职时间
3       自离     2005-07-12
5       辞职     2005-07-15


如何显示出时间范围在“2005-06-16” and "2005-07-15" 的记录,表样如下
表3(A03)

Id  增(减) 
2    增员
3    减员
5    增员
5    减员


select
    a.I,a.[增(减)]
from
    (select Id,时间 = 入职时间,[增(减)]='增员' from A01
     union
     select Id,时间 = 离职时间,[增(减)]='减员' from A02) a
where
    a.时间 between '2005-06-16' and '2005-07-15'
order by
    a.时间
select
    a.I,a.[增(减)]
from
    (select Id,时间 = 入职时间,[增(减)]='增员' from A01
     union
     select Id,时间 = 离职时间,[增(减)]='减员' from A02) a
where
    a.时间 between '2005-06-16' and '2005-07-15'
order by
    a.Id
Select Id,[增(减)] from
(Select Id,'增员' As [增(减)] from A01,入职时间 As 时间 Where 入职时间 Between '2005-06-16' And '2005-07-15'
Union All
Select Id,'减员' As [增(减)] from A02,离职时间 As 时间 Where 离职时间 Between '2005-06-16' And '2005-07-15'
) A
Order By 时间
上面的语句错误了。

如果是按时间排。

--建立测试环境
Create Table A01(
Id Int,
姓名 Nvarchar(10),
入职时间 Varchar(10),
人员类别 Nvarchar(10),
身份证号 Varchar(10))

Create Table A02
(Id Int,
 离职类型 Nvarchar(10),
 离职时间 Varchar(10))

--插入数据
Insert A01 Values(1,    N'张三',   '2005-06-11',      N'在职人员',       '')
Insert A01 Values(2,    N'李四',   '2005-06-28',      N'在职人员',       '')
Insert A01 Values(3,    N'王五',   '2005-03-12',      N'离职人员',       '')
Insert A01 Values(4,    N'赵六',   '2005-04-11',      N'在职人员',       '')
Insert A01 Values(5,    N'马二',   '2005-06-28',      N'离职人员',  '')

Insert A02 Values(3,       '自离',     '2005-07-12')
Insert A02 Values(5,       '辞职',     '2005-07-15')
--测试
Select Id,[增(减)] from
(Select Id,N'增员' As [增(减)],入职时间 As 时间 from A01 Where 入职时间 Between '2005-06-16' And '2005-07-15'
Union All
 Select Id,N'减员' As [增(减)],离职时间 As 时间 from A02 Where 离职时间 Between '2005-06-16' And '2005-07-15'
) A
Order By 时间
--删除测试环境
Drop Table A01,A02
--结果
/*
Id [增(减)]
2 增员
5 增员
3 减员
5 减员
*/
如楼主所要的结果。
--建立测试环境
Create Table A01(
Id Int,
姓名 Nvarchar(10),
入职时间 Varchar(10),
人员类别 Nvarchar(10),
身份证号 Varchar(10))

Create Table A02
(Id Int,
 离职类型 Nvarchar(10),
 离职时间 Varchar(10))

--插入数据
Insert A01 Values(1,    N'张三',   '2005-06-11',      N'在职人员',       '')
Insert A01 Values(2,    N'李四',   '2005-06-28',      N'在职人员',       '')
Insert A01 Values(3,    N'王五',   '2005-03-12',      N'离职人员',       '')
Insert A01 Values(4,    N'赵六',   '2005-04-11',      N'在职人员',       '')
Insert A01 Values(5,    N'马二',   '2005-06-28',      N'离职人员',  '')

Insert A02 Values(3,       '自离',     '2005-07-12')
Insert A02 Values(5,       '辞职',     '2005-07-15')
--测试
Select Id,N'增员' As [增(减)] from A01 Where 入职时间 Between '2005-06-16' And '2005-07-15'
Union All
Select Id,N'减员' As [增(减)] from A02 Where 离职时间 Between '2005-06-16' And '2005-07-15'
Order By Id,[增(减)] Desc
--删除测试环境
Drop Table A01,A02
--结果
/*
Id [增(减)]
2 增员
3 减员
5 增员
5 减员
*/

可以这样
select
    a.I,a.[增(减)]
from
    (select Id,时间 = 入职时间,[增(减)]='增员' from A01 where 时间 between '2005-06-16' and '2005-07-15'
     union
     select Id,时间 = 离职时间,[增(减)]='减员' from A02 where 时间 between '2005-06-16' and '2005-07-15'
) a
order by
    a.Id
mark
回复人: paoluo(一天到晚游泳的鱼) ( ) 信誉:100 

的是正解
select
    a.Id,a.[增(减)]
from
    (select Id,时间 = 入职时间,[增(减)]='增员' from A01
     union
     select Id,时间 = 离职时间,[增(减)]='减员' from A02) a
where
    a.时间 between '2005-06-16' and '2005-07-15'
order by
    a.Id
谢谢高手提供解决方案,结帐

事件查看器的错误 service control mangger ,解决立即接分,分不够再加 ^_^ :) 安装文件数据拯救求助 调用DLL中函数产生Invalid pointer Opreation 问题(不是返回string) 2000系统中网络权限的问题! WINXP打不了sp1 DBGrid中插入一個新行,如何做? 为什么我的cookie总是慢半拍?? javac编译的时候正确,用java运行,出现如下错误:Exception in thread \"main\" java.lang.NoClassDefFoundError:f:\\zhourui SQL语句的分组 如何实现模式对话框的分页显示 陈水扁遭受枪击的弹道分析图片......zzz 关于动态快捷菜单的建立 如何实现模式对话框的分页显示? 关于webservice问题请看例子!! 怎样样才能知道一个TEXTBOX控件中的内容是不是被改动了呢?急呀 C++技术问题 高手的过来 CheckedListBox 的取值问题? 寻连继续剧<<少年风流唐伯虎>>在线播放或下载链接!万分感谢! TOAD命令行方式导出文件 大家千万不要安装微软的MSN Toolbar,他用的是3721 我该怎么删掉这种类型的文件呢?非常感谢!~~~~ 路由是路由IP地址呢还是路由子网呀? 给分100不够在加 我的程序里用到的oracle数据库,每刷新一次数据库里就会多一条会话 我也能加入中国国家队的十大理由 (转贴) 怎么把long型转成char * 和 CString 类型? retrieve()函数在PB6.5和在PB8.0下触发事件是否相同!(是否触发rowfocuschanged) 一个asp.net初学者的困惑!!!!!!!!!!!很急的!◎ 请教网络游戏封包分析 【高分求解】安装asp.net论坛的问题