本帖最后由 chirea 于 2011-10-10 19:50:49 编辑

解决方案 »

  1.   


    select 员工编号, 月份 as 日期,天数1 as number from PBTEST
     union all
     select 员工编号, 月份 as 日期,天数2 as number from PBTEST
     union all
     select 员工编号, 月份 as 日期,天数2 as number from PBTEST
      

  2.   


    select 员工编号 , 月份 , numbers from PBTEST unpivot (numbers for 天数 in([天数1] , [天数2] , [天数3])) t
      

  3.   

    出错的原因是你的数据给错了:
    CREATE  TABLE PBTEST
    (
    员工编号 nvarchar(20),
    月份  nvarchar(30),
    天数1 nvarchar(30),
    天数2 nvarchar(30),
    天数3 nvarchar(30)
    )
    insert into PBTEST select '001','2011/10/01','1','2','3'
    insert into PBTEST select '002','2011/10/01','11','23','23'
    insert into PBTEST select '003','2011/10/01','7','6','8'
    go
    select 员工编号,月份,天数1 from PBTEST
    union all
    select 员工编号,月份,天数2 from PBTEST
    union all
    select 员工编号,月份,天数3 from PBTEST order by 1
    /*
    员工编号                 月份                             天数1
    -------------------- ------------------------------ ------------------------------
    001                  2011/10/01                     1
    001                  2011/10/01                     2
    001                  2011/10/01                     3
    002                  2011/10/01                     23
    002                  2011/10/01                     23
    002                  2011/10/01                     11
    003                  2011/10/01                     7
    003                  2011/10/01                     6
    003                  2011/10/01                     8(9 行受影响)*/
    go
    drop table pbtest
      

  4.   


    CREATE  TABLE PBTEST
    (
    员工编号 nvarchar(20),
    月份  nvarchar(30),
    天数1 nvarchar(30),
    天数2 nvarchar(30),
    天数3 nvarchar(30)
    )
    insert into PBTEST select '001','2011/10/01','1','2','3'
    insert into PBTEST select '001','2011/10/02','4','5','6'
    insert into PBTEST select '002','2011/10/02','11','23','23'
    insert into PBTEST select '003','2011/10/03','7','6','8'declare @sql varchar(8000)
    select @sql = isnull(@sql + ' union all ' , '' ) + ' select 员工编号,月份,[numbers] = ' + quotename(Name) + ' from PBTEST'
    from syscolumns 
    where name! = N'员工编号' and name! = N'月份' and  ID = object_id('PBTEST')
    order by colid asc
    exec(@sql + ' order by 员工编号,月份')
      

  5.   

    晴天,我的数据没错.我那月份字段
    002  2011/10/1   11
    002  2011/10/2   23
    月份里面天数要天数1,2,3为日期
    应该 convert(char(8),月份,120)+'天数1,2这里需要substring()吧.我不知道怎么写了
      

  6.   

    是这个意思?
    CREATE  TABLE PBTEST
    (
    员工编号 nvarchar(20),
    月份  nvarchar(30),
    天数1 nvarchar(30),
    天数2 nvarchar(30),
    天数3 nvarchar(30)
    )
    insert into PBTEST select '001','2011/10/01','1','2','3'
    insert into PBTEST select '002','2011/10/01','11','23','23'
    insert into PBTEST select '003','2011/10/01','7','6','8'
    go
    select 员工编号,月份,天数1 from PBTEST
    union all
    select 员工编号,convert(varchar(10),dateadd(d,1,月份),120),天数2 from PBTEST
    union all
    select 员工编号,convert(varchar(10),dateadd(d,2,月份),120),天数3 from PBTEST order by 1,2
    /*
    员工编号                 月份                             天数1
    -------------------- ------------------------------ ------------------------------
    001                  2011/10/01                     1
    001                  2011-10-02                     2
    001                  2011-10-03                     3
    002                  2011/10/01                     11
    002                  2011-10-02                     23
    002                  2011-10-03                     23
    003                  2011/10/01                     7
    003                  2011-10-02                     6
    003                  2011-10-03                     8(9 行受影响)*/
    go
    drop table pbtest
      

  7.   

    CREATE  TABLE PBTEST
    (
    员工编号 nvarchar(20),
    月份  nvarchar(30),
    天数1 nvarchar(30),
    天数2 nvarchar(30),
    天数3 nvarchar(30)
    )
    insert into PBTEST select '001','2011/10/01','1','2','3'
    insert into PBTEST select '002','2011/10/01','11','23','23'
    insert into PBTEST select '003','2011/10/01','7','6','8'
    go
    select 员工编号,月份,天数1 from PBTEST
    union all
    select 员工编号,convert(varchar(10),dateadd(d,1,月份),111),天数2 from PBTEST
    union all
    select 员工编号,convert(varchar(10),dateadd(d,2,月份),111),天数3 from PBTEST order by 1,2
    /*
    员工编号                 月份                             天数1
    -------------------- ------------------------------ ------------------------------
    001                  2011/10/01                     1
    001                  2011/10/02                     2
    001                  2011/10/03                     3
    002                  2011/10/01                     11
    002                  2011/10/02                     23
    002                  2011/10/03                     23
    003                  2011/10/01                     7
    003                  2011/10/02                     6
    003                  2011/10/03                     8(9 行受影响)*/
    go
    drop table pbtest
      

  8.   

    那还是表设计有问题.
    直接
    CREATE  TABLE PBTEST
    (
    员工编号 nvarchar(20),
    日期  datetime,
    天数1 int
    )
    多好!
    能省去一大堆麻烦.
      

  9.   

    又来行转列啊,呵呵可以尝试用unpivot
      

  10.   

    use Test
    goCREATE  TABLE PBTEST
    (
    员工编号 nvarchar(20),
    月份  nvarchar(30),
    天数1 nvarchar(30),
    天数2 nvarchar(30),
    天数3 nvarchar(30)
    )
    insert into PBTEST select '001','2011/10/01','1','2','3'
    insert into PBTEST select '002','2011/10/01','11','23','23'
    insert into PBTEST select '003','2011/10/01','7','6','8'
    go
    select 
    员工编号,
    月份=DATEADD(dd,cast(stuff(Cols,1,2,'')as int)-1,月份),
    numbers
    from PBTEST 
    unpivot (numbers for Cols in([天数1],[天数2],[天数3])) as b/*
    员工编号 月份 numbers
    001 2011-10-01 00:00:00.000 1
    001 2011-10-02 00:00:00.000 2
    001 2011-10-03 00:00:00.000 3
    002 2011-10-01 00:00:00.000 11
    002 2011-10-02 00:00:00.000 23
    002 2011-10-03 00:00:00.000 23
    003 2011-10-01 00:00:00.000 7
    003 2011-10-02 00:00:00.000 6
    003 2011-10-03 00:00:00.000 8
    */
      

  11.   

    每个月操作,并非要做出个报表一样的表啊.

    CREATE TABLE PBTEST
    (
    员工编号 nvarchar(20),
    日期 datetime,
    天数1 int
    )
    这样的表上,要按月操作是很简单的事情,只要 where 日期 between 'XXXX-XX-01' and 'XXXX-XX-30' 不就可以了嘛. 
      

  12.   

    between 是区间吧
    用户要对每月每天设置一个值.