這是一個交叉表的問題,处你在sql幫助里查"交叉表"可以查到一些有用的幫助.
在CSDN本版也有很多這種問題,你搜一下吧.

解决方案 »

  1.   

    pengdali(大力)的拿手好戏,你找一下,论坛上大把的。
    pengdali(大力)好象今天休假?
      

  2.   

    select jobNo,case  when  (depart='0001' and event='in') then time end  as 0001in, 
    case  when  (depart='0002' and event='in') then time end  as  '0002in' ...
    from table2
      

  3.   

    各位,我也知道是交差表的問題,可是小弟愚鈍搞不來呀!pengdali(大力)擅長大家都清楚,如果pengdali(大力)見到此貼可否,對類似的Case語句處理這種問題做一個總結,及給我們一些技巧...
      

  4.   

    --------------------------字段名不能以数据开头.
    Declare @Str VarChar(8000)
    Set @Str=''
    Select @Str=@Str+'D'+a.Depart+IsNull(Event,'N')+'=Max(Case when Event='''+IsNUll(Event,'In')+''' then Time else Null end),' from Dep a,Detail b 
      where a.Depart*=b.Depart
    Select @Str
    Set @Str=Left(@Str,Len(@Str)-1)
    Exec('Select JobNo,'+@Str+' From Detail  Group by JobNo')
      

  5.   

    To:97866(weiLuang)你的方法可行,但是如果記錄很多條@Str將會被撐爆...!!
      

  6.   

    参考:
    http://expert.csdn.net/Expert/topic/2041/2041208.xml?temp=.6613733
      

  7.   

    declare @sql varchar (8000)
    set @sql='select JobNo '
    select @sql=@sql+char(13)
    +',min(case when Depart ='''+Depart
    +''' and Event=''in'' then Time end) as ['+Depart
    +'in]'+char(13)
    +',max(case when Depart ='''+Depart
    +''' and Event=''out'' then Time end) as ['+Depart
    +'out]'
    from Depart
    set @sql=@sql+char(13)+'from table1 group by JobNo'
    exec(@sql)
      

  8.   

    declare @sql varchar (8000)
    set @sql='select JobNo '
    select @sql=@sql+char(13)
    +',min(case when Depart ='''+Depart
    +''' and Event=''in'' then Time end) as ['+Depart
    +'in]'+char(13)
    +',max(case when Depart ='''+Depart
    +''' and Event=''out'' then Time end) as ['+Depart
    +'out]'
    from Depart
    set @sql=@sql+char(13)+'from table1 group by JobNo'
    exec(@sql)
      

  9.   

    create table #a(Depart varchar(10))
    insert #a values('0001')
    insert #a values('0002')
    insert #a values('0003')
    create table #b (JobNo varchar(100),Depart varchar(100),Event varchar(100),[Time] datetime)
    insert #b values('001','0001','in','2003/07/01')
    insert #b values('001','0001','out','2003/07/02')
    insert #b values('001','0002','in','2003/07/03')
    insert #b values('001','0002','out','2003/07/04')
    insert #b values('002','0001','in','2003/07/05')
    insert #b values('002','0001','out','2003/07/06')
    declare @sql varchar(8000)
    set @sql = 'select JobNo'
    select @sql = @sql + ',max(case when Depart='''+cast(Depart as varchar(10))+''' and Event='''+Event
     +''' then [Time] end) ['+cast(Depart as varchar(10))+Event+']'
      from (select a.depart,b.Event from #a a,(select distinct Event from #b) b ) tem order by depart,Event
    select @sql = @sql+' from #b group by JobNo'exec(@sql)
    go
    drop table #a,#b