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

求高手帮助^解决方法

2012-01-21 
求高手帮助^^^^^^^^^^^^^^^^^^^^^^^^表1DeviceNODeviceNameCatalogNO-----------------------------------

求高手帮助^^^^^^^^^^^^^^^^^^^^^^^^
表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                 李四           已归还  



请高手帮助解决

[解决办法]
看不懂,李四的2006-11-1 哪來的?
[解决办法]
CREATE TABLE TB1
(
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 ',1

GO

SELECT
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 行受影响)
[解决办法]
李四的归还时间2006-11-1,我是直接附值,你可以根不同的需要改动

select a.DeviceNO '资产编号 ',e.DeviceName '资产名称 ',convert(varchar(10),b.ApplyDatetime,120) '领用时间 '
,(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

热点排行