形如以下table 
   工号   入厂日期           离厂日期   
   001     2005-03-03      2005-03-28
   002     2005-03-03          null
   003     2005-03-03      2005-04-05 已知查询日期 范围为  2005-03-01  至2005-03-31
我想查询的结果是以下情况:
  工号 入厂日期   离厂日期    入厂之前扣除天数 入厂之后扣除天数 合计  
  001 2005-03-03  2005-03-28  3                4                 7
  002 2005-03-03  null        3                0                 3  
  003 2005-03-03  2005-04-05  3                0                  3
请高手多多指点一下呀!多谢!!!!!!!!!!!!!!!!!!!!!怎么变行了,再发一次!

解决方案 »

  1.   


    --建立测试环境
    Create table TEST
    (工号 Varchar(10),
    入厂日期 DateTime,
    离厂日期 DateTime
    )
    GO
    --插入数据
    Insert TEST Values('001',     '2005-03-03',      '2005-03-28')
    Insert TEST Values('002',     '2005-03-03',          null    )
    Insert TEST Values('003',     '2005-03-03',      '2005-04-05') 
    GO
    --测试
    Declare @BeginDate DateTime
    Declare @EndDate DateTime
    Set @BeginDate='2005-03-01'
    Set @EndDate='2005-03-31'
    Select *,(入厂之前扣除天数+入厂之后扣除天数) As 合计 from 
    (Select *,
    (Case When 入厂日期 >@BeginDate Then DateDiff(d,@BeginDate,入厂日期)+1 Else 0 End) As 入厂之前扣除天数,
    (Case When @EndDate >离厂日期 Then DateDiff(d,离厂日期,@EndDate)+1 Else 0 End) As 入厂之后扣除天数
     from TEST) A
    --删除测试环境
    Drop table TEST
    --结果
    /*
    工号 入厂日期 离厂日期 入厂之前扣除天数 入厂之后扣除天数 合计
    001 2005-03-03 00:00:00.000 2005-03-28 00:00:00.000 3 4 7
    002 2005-03-03 00:00:00.000 NULL 3 0 3
    003 2005-03-03 00:00:00.000 2005-04-05 00:00:00.000 3 0 3
    */
      

  2.   

    你自己的日期是不是DateTime型的??另外,你需要显示出来的时间是不是要控制成只要日期??如果是的话,可以再帮你改一下。
      

  3.   

    谢谢二位!我看一下!TO: paoluo(一天到晚游泳的鱼) 
         日期是DATetime 型的!是要控制成日期!
    TO:qizhirui(其其)
         主要目的是计算该员工当月出勤的天数,扣除入厂的天数,就是距月初的天数,同理,离职也一样!
      

  4.   

    那改下。--建立测试环境
    Create table TEST
    (工号 Varchar(10),
    入厂日期 DateTime,
    离厂日期 DateTime
    )
    GO
    --插入数据
    Insert TEST Values('001',     '2005-03-03',      '2005-03-28')
    Insert TEST Values('002',     '2005-03-03',          null    )
    Insert TEST Values('003',     '2005-03-03',      '2005-04-05') 
    GO
    --测试
    Declare @BeginDate DateTime
    Declare @EndDate DateTime
    Set @BeginDate='2005-03-01'
    Set @EndDate='2005-03-31'
    Select 工号,Convert(varchar(10),入厂日期,120) As 入厂日期,Convert(varchar(10),离厂日期,120) As 离厂日期,入厂之前扣除天数,入厂之后扣除天数,(入厂之前扣除天数+入厂之后扣除天数) As 合计 from 
    (Select *,
    (Case When 入厂日期 >@BeginDate Then DateDiff(d,@BeginDate,入厂日期)+1 Else 0 End) As 入厂之前扣除天数,
    (Case When @EndDate >离厂日期 Then DateDiff(d,离厂日期,@EndDate)+1 Else 0 End) As 入厂之后扣除天数
     from TEST) A
    --删除测试环境
    Drop table TEST
    --结果
    /*
    工号 入厂日期 离厂日期 入厂之前扣除天数 入厂之后扣除天数 合计
    001 2005-03-03 2005-03-28 3 4 7
    002 2005-03-03 NULL 3 0 3
    003 2005-03-03 2005-04-05 3 0 3
    */
      

  5.   

    TO:paoluo(一天到晚游泳的鱼)
       我想再问一下,那个离厂日期中NULL 没有影响吗?"@EndDate >离厂日期"这样比较不会出问题?