select a.id,b.subid,a....,b.... from a,b where a.id = b.id
解决方案 »
- 如何对MAX()字段进行汇总求和
- sql server 2008 安装问题???!!!
- 求sql 2005 添加主键的N种方法
- 如何得到数据库中的存储过程的个数
- 请问如何导出一个数据库中所有的表和每个表的前100条记录
- 在sql server中,sql语言有没有数据类型转换方法?
- 请高手支招:将.xml配置文件Data Source改为本机IP时,数据库(SQL2005)链接失败
- 求助一简单SQL语句,谢谢
- 这个不是太难,但很不简单!
- 如何按照字符号串的后几位排序 难
- [9i-Q-DBS7-T-0212002]请教高手:Sql Server 7.0中,如何向表中添加一个计算字段?*在线等待*
- UP者有分:关于存储过程的概念和作用,在什么时候要用?(D6,Ado,Ms-sql)
再补充一点:也就是以A表的结构为主,把B表的数据列附加到A表列中,组成一个新的表. 谢谢!我仍在等待!
from b jion a
on a.id = b.id
新表
a.id ... b.id, b1(对应a的第一个值), b2(对应a的第二个值)
...
b1(对应a的第一个值), b2(对应a的第二个值)
--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^如果你的b表有10条重复的那不是有10列???
先读出所有A表的记录
rs.open "select * from A表",conn,1,1
对A表的每一条记录在B表中寻找对应记录
do while not rs.eof
set rs1=server.createobject("ADODB.RecordSet")
rs1.open "select * from B表 where id="+rs("id"),conn,1,1
设新表的结构为只有一个字段id的新表C表,没有请在执行前创建好。
判断C表的字段个数-1后是否大于rs1的记录数。如果大于则执行记录添加,先判断rs1是否有记录数,如果有则update那条记录,如果没有则先rs1.addnew,再update。如果不大于,则增加C表的字段,增加的字段数为大于多少增加多少。增加好后再进行数据的添加。建立C表之前,还可以先找出在B表中,同一ID记录数最多的记录数是多少,然后再来创建C表,这样就不用在对第个ID的记录数与字段数进行判断,速度会快很多。最后再对记录进行逐条添加,同这一ID,则update,没有,则append。(后面这种方法要好点。)
a表:
-------------
ID Name Age
-------------
1 Joan 23
2 John 26
3 Alan 25b表:
--------------------
ID AID Book
--------------------
1 3 <<river>>
2 1 <<mother>>
3 1 <<C++>>
4 2 <<love>>
--------------------a表主键ID,与b表AID关联;现在请合并为新表如下:c表
---------------------------------------------
a.ID a.Name a.Age b.AID b.book1 b.book2
---------------------------------------------
1 Joan 23 1 <<mother>> <<C++>>
2 John 26 2 <<love>> NULL
3 Alan 25 3 <<river>> NULL
---------------------------------------------
以上就是我想问的,请各位兄弟捧场,救救兄弟!谢谢!
Select DISTINCT a.ID,..........
关键字 DISTINCT 的作用就是把重复的记录过滤。
表的结构不是要根据表B中的重复记录的条数来定
那不是要找出以A表中的ID在B中的记录数最多动态来决定字段数
如果是依据b表中的aid列相应行的值生成c表中相应的列好象只能用动态sql语句了
如果aid列的值只有一种或者两种好象还能生成吧!
set @imax = 0
set @i = 0
select top 1 @imax = count(*) from b
group by aid
order by count(*) descselect * into #t from awhile @i < @imax
begin
set @str = 'alter table #t add book' + convert(varchar,@i+1) + ' varchar(20) null'
exec(@str)
set @str = 'update m set m.book' + convert(varchar,@i+1) + '=n.book from #t as m,
(select b2.book,min(b2.aid) as aid from b as b1,b as b2
where b1.aid in (select aid from b group by aid having count(*) >' + convert(varchar,@i) + ')
and b1.aid = b2.aid and b1.id <= b2.id
group by b2.book
having count(*) = ' + convert(varchar,@i+1) +
') as n where m.id = n.aid'
exec(@str)
set @i = @i + 1
end
select * from #t
drop table #t
create table a(id int,name varchar(10))
create table b(id int,aid int,book varchar(20))
insert a values(1,'joan')
insert a values(2,'john')
insert a values(3,'alan')insert b values(1,3,'river')
insert b values(2,1,'mother')
insert b values(3,1,'C++')
insert b values(4,2,'love')
insert b values(5,1,'hate')
insert b values(6,3,'gaoding')