表1
DeviceNO DeviceName CatalogNO
--------------------- -----------------------------------------------------------------------
B0001 笔记本 10001
D0001 打印机 10001
T0001 台式机 10001
T0002 投影机 10001表2
DeviceNO ApplyUseID ApplyReturnID
--------------------- ---------- -------------
B0001 1001 1003
T0001 1002 NULL表3
ApplyID ApplyUserName ApplyDatetime ApplyFlag
---------------------- ----------------------- ----------- -----------
1001 张三 2004-05-15 00:00:00.000 0
1002 李四 2006-01-01 00:00:00.000 0
1003 张三 2004-06-16 00:00:00.000 1
结果如下图所示(注意,当前状态是根据 表2中 ApplyReturnID字段是否为空作判断的) 资产编号 资产名称 领用时间 归还时间 使用者 当前状态
B0001 笔记本 2004-05-15 2004-06-16 张三 使用中
T0001 台式机 2006-01-01 2006-11-1 李四 已归还 请高手帮助解决
DeviceNO DeviceName CatalogNO
--------------------- -----------------------------------------------------------------------
B0001 笔记本 10001
D0001 打印机 10001
T0001 台式机 10001
T0002 投影机 10001表2
DeviceNO ApplyUseID ApplyReturnID
--------------------- ---------- -------------
B0001 1001 1003
T0001 1002 NULL表3
ApplyID ApplyUserName ApplyDatetime ApplyFlag
---------------------- ----------------------- ----------- -----------
1001 张三 2004-05-15 00:00:00.000 0
1002 李四 2006-01-01 00:00:00.000 0
1003 张三 2004-06-16 00:00:00.000 1
结果如下图所示(注意,当前状态是根据 表2中 ApplyReturnID字段是否为空作判断的) 资产编号 资产名称 领用时间 归还时间 使用者 当前状态
B0001 笔记本 2004-05-15 2004-06-16 张三 使用中
T0001 台式机 2006-01-01 2006-11-1 李四 已归还 请高手帮助解决
(
DeviceNO VARCHAR(10),
DeviceName VARCHAR(10),
CatalogNO INT
)
CREATE TABLE TB2
(
DeviceNO VARCHAR(10),
ApplyUseID INT,
ApplyReturnID INT
)
CREATE TABLE TB3
(
ApplyID INT,
ApplyUserName VARCHAR(10),
ApplyDatetime DATETIME,
ApplyFlag INT
)
INSERT INTO TB1
SELECT 'B0001','笔记本',10001 UNION ALL
SELECT 'D0001','打印机',10001 UNION ALL
SELECT 'T0001','台式机',10001 UNION ALL
SELECT 'T0002','投影机',10001
INSERT INTO TB2
SELECT 'B0001',10001,10003 UNION ALL
SELECT 'T0001',10002,NULL INSERT INTO TB3
SELECT 10001,'张三','2004-05-15 00:00:00.000',0 UNION ALL
SELECT 10002,'李四','2006-01-01 00:00:00.000',0 UNION ALL
SELECT 10003,'张三','2004-06-16 00:00:00.000',1GOSELECT
TB2.DeviceNO as 资产编号,
TB1.DeviceName as 资产名称,
领用时间=(SELECT ApplyDatetime FROM TB3 WHERE ApplyFlag=0 AND ApplyID=TB2.ApplyUseID),
归还时间=
CASE
WHEN TB2.ApplyReturnID is null
THEN
(SELECT DATEADD(MONTH,10,ApplyDatetime) FROM TB3 WHERE ApplyFlag=0 AND ApplyID=TB2.ApplyUseID)
ELSE
(SELECT ApplyDatetime FROM TB3 WHERE ApplyFlag=1 AND ApplyID=TB2.ApplyReturnID)
END ,
使用者 = (SELECT DISTINCT ApplyUserName FROM TB3 WHERE ApplyID=TB2.ApplyUseID),
case when TB2.ApplyReturnID is null then '已归还' else '使用中' end as 当前状态
FROM TB2 left outer join TB1 ON TB2.DeviceNO=TB1.DeviceNO
--结果
资产编号 资产名称 领用时间 归还时间 使用者 当前状态
---------- ---------- ----------------------- ----------------------- ---------- ------
B0001 笔记本 2004-05-15 00:00:00.000 2004-06-16 00:00:00.000 张三 使用中
T0001 台式机 2006-01-01 00:00:00.000 2006-11-01 00:00:00.000 李四 已归还(2 行受影响)
,(case when (select d.ApplyDatetime from 表2 c, 表3 d where c.ApplyReturnID=d.ApplyID and a.DeviceNO=c.DeviceNO) is null then '2006-11-1'
else convert(varchar(10),(select d.ApplyDatetime from 表2 c, 表3 d where c.ApplyReturnID=d.ApplyID and a.DeviceNO=c.DeviceNO),120) end) '归还时间'
,b.ApplyUserName '使用人'
,(case when a.ApplyReturnID is null then '已归还'
else '使用中' end) '当前状态'
from 表2 a, 表3 b,表1 e where a.ApplyUseID=b.ApplyID and a.DeviceNO=e.DeviceNO