表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        李四     已归还 请高手帮助解决

解决方案 »

  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',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 行受影响)
      

  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