表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
...
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
...
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)
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)
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)
你看了狼图腾?