如题~~~~~~
原表及数据:(原始表有N个)
tb1
id aa bb cc dd stime
1 11 22 33 44 2009-5-18
2 55 66 77 88 2009-5-19
tb2
id ee ff gg hh stime
1 12 23 34 45 2009-5-18
2 56 67 78 89 2009-5-19
导入表:tb3(想实现以下效果)
id sname svalue stime
1 a01 11 2009-5-18
2 b01 22 2009-5-18
3 c01 33 2009-5-18
4 d01 44 2009-5-18
5 a01 55 2009-5-19
6 b01 66 2009-5-19
7 c01 77 2009-5-19
8 d01 88 2009-5-19
9 e01 12 2009-5-18
10 f01 23 2009-5-18
11 g01 34 2009-5-18
12 h01 45 2009-5-18
13 e01 56 2009-5-19
14 f01 67 2009-5-19
15 g01 78 2009-5-19
16 h01 89 2009-5-19
想实现把原始表中数据导入tb3表中,其中原始表和导入表不在同一个数据库,表的字段名也不相同,但可以写死,
比如tb1中aa对应的tb3中的就是a01
可以用一个小程序实现,条件就是选择原始表名和时间,点导入就把该表对应时间的数据导入到tb3中
想了半天没想出好的解决方法.
请个位帮帮忙,谁做过类似的例子给解答下.要是能用一个存储过程时间就更好了!
意思表达不清楚的请问~
100分笑纳~~
------解决方案--------------------
- SQL code
insert into newdatabase.dbo.newdata(col1,col2,col3)select col1,col2,col3from olddatawhere 条件
------解决方案--------------------
------解决方案--------------------
要用到行列转换,参照
- SQL code
/*问题:如果上述两表互相换一下:即表结构和数据为:姓名 语文 数学 物理张三 74 83 93李四 74 84 94想变成(得到如下结果): 姓名 课程 分数 ---- ---- ----李四 语文 74李四 数学 84李四 物理 94张三 语文 74张三 数学 83张三 物理 93--------------*/create table tb(姓名 varchar(10) , 语文 int , 数学 int , 物理 int)insert into tb values('张三',74,83,93)insert into tb values('李四',74,84,94)go--SQL SERVER 2000 静态SQL。select * from( select 姓名 , 课程 = '语文' , 分数 = 语文 from tb union all select 姓名 , 课程 = '数学' , 分数 = 数学 from tb union all select 姓名 , 课程 = '物理' , 分数 = 物理 from tb) torder by 姓名 , case 课程 when '语文' then 1 when '数学' then 2 when '物理' then 3 end--SQL SERVER 2000 动态SQL。--调用系统表动态生态。declare @sql varchar(8000)select @sql = isnull(@sql + ' union all ' , '' ) + ' select 姓名 , [课程] = ' + quotename(Name , '''') + ' , [分数] = ' + quotename(Name) + ' from tb'from syscolumns where name! = N'姓名' and ID = object_id('tb') --表名tb,不包含列名为姓名的其它列order by colid ascexec(@sql + ' order by 姓名 ')--SQL SERVER 2005 动态SQL。select 姓名 , 课程 , 分数 from tb unpivot (分数 for 课程 in([语文] , [数学] , [物理])) t--SQL SERVER 2005 动态SQL,同SQL SERVER 2000 动态SQL。
------解决方案--------------------
- SQL code
DECLARE @TA TABLE([id] INT, [aa] INT, [bb] INT, [cc] INT, [dd] INT, [stime] DATETIME)INSERT @TA SELECT 1, 11, 22, 33, 44, '2009-5-18' UNION ALL SELECT 2, 55, 66, 77, 88, '2009-5-19'DECLARE @TB TABLE([id] INT, [ee] INT, [ff] INT, [gg] INT, [hh] INT, [stime] DATETIME)INSERT @TB SELECT 1, 12, 23, 34, 45, '2009-5-18' UNION ALL SELECT 2, 56, 67, 78, 89, '2009-5-19'SELECT id=row_number() over (order by px,id,seq),sname,svalue,stime INTO tb3FROM (SELECT px=0,id,seq=1,svalue=aa,sname='a01',stime FROM @TA UNION ALLSELECT px=0,id,seq=2,bb,'b01',stime FROM @TA UNION ALLSELECT px=0,id,seq=3,cc,'c01',stime FROM @TA UNION ALLSELECT px=0,id,seq=4,dd,'d01',stime FROM @TA UNION ALLSELECT px=1,id,seq=1,ee,'e01',stime FROM @TB UNION ALLSELECT px=1,id,seq=2,ff,'f01',stime FROM @TB UNION ALLSELECT px=1,id,seq=3,gg,'g01',stime FROM @TB UNION ALLSELECT px=1,id,seq=4,hh,'h01',stime FROM @TB ) TORDER BY px,id,seqselect * from tb3drop table tb3/*id sname svalue stime-------------------- ----- ----------- -----------------------1 a01 11 2009-05-18 00:00:00.0002 b01 22 2009-05-18 00:00:00.0003 c01 33 2009-05-18 00:00:00.0004 d01 44 2009-05-18 00:00:00.0005 a01 55 2009-05-19 00:00:00.0006 b01 66 2009-05-19 00:00:00.0007 c01 77 2009-05-19 00:00:00.0008 d01 88 2009-05-19 00:00:00.0009 e01 12 2009-05-18 00:00:00.00010 f01 23 2009-05-18 00:00:00.00011 g01 34 2009-05-18 00:00:00.00012 h01 45 2009-05-18 00:00:00.00013 e01 56 2009-05-19 00:00:00.00014 f01 67 2009-05-19 00:00:00.00015 g01 78 2009-05-19 00:00:00.00016 h01 89 2009-05-19 00:00:00.000*/