表A
ItemCode  ItemName     ItemFieldName
01        学费         tuitem01
02        住宿费       tuitem02
03        代收教材费   tuitem03
04        军训用品费   tuitem06
07        校园卡       tuitem08
表B
BID    StudentID   tuitem01  tuitem02  tuitem03  tuitem04 ... tuitem20 (B列在A里可能没有)
1      20050101    560.00    100.00    0.00      0.00         0.00
2      20050102    560.00    200.00    0.00      0.00         0.00
3      20050103    380.00    300.00    0.00      0.00         0.00
...请问怎样根据表A,表B结构和数据生成一个新表C (数据为0的不用插入到C)
CID      StudentID   ItemName   Fee
1        20050101    学费       560.00
2        20050101    住宿费     100.00
3        20050102    学费       560.00
4        20050102    住宿费     200.00
5        20050103    学费       380.00
6        20050103    住宿费     300.00
...
      

解决方案 »

  1.   

    declare @sql varchar(8000)
    set @sql=''select @sql=@sql+' union all select StudentID,'''+ItemName+''' as ItemName,'+ItemFieldName+' as Fee from b where '+    ItemFieldName+'>0 '
    from a
    set @sql=stuff(@sql,1,10,'')exec(@sql)
      

  2.   

    生成新表Ccreate table c (
    Cid int not null IDENTITY(1,1),
    StudentID varchar(20),
    ItemName varchar(20),
    Fee numeric(10,2)
    )declare @sql varchar(8000)
    set @sql=''select @sql=@sql+' union all select StudentID,'''+ItemName+''' as ItemName,'+ItemFieldName+' as Fee from b where '+    ItemFieldName+'>0 '
    from a
    set @sql=stuff(@sql,1,10,'')exec('insert C '+@sql)
      

  3.   

    是指少了CID吗?CID自动生成,后面补了
      

  4.   

    declare @sql varchar(8000)
    set @sql = ''
    select @sql=@sql+' union all select b.studentId,a.itemName,b.'+a.name+' [Fee] from 表A a,表B where a.ItemFieldName='''+a.name+''''
    from syscolumns a
    join sysobjects b on a.id=b.id 
    and b.xtype='U' and b.name='表B'
    where a.name like 'tuitem%'
    set @sql=stuff(@sql,1,10,'')
    set @sql='select identity(int)[CID],a.* from ('+@sql+')a'
    exec(@sql)
      

  5.   

    quanyi(长生天):
    你看了狼图腾?
      

  6.   

    确实只少了个cid,你的不错.我居然还从表B的列中取.这一题直接从表A取就可以了.我太傻了哈哈.