sql如何将两个表中主键相同的行的内容合并到一行?

时间:2020-12-01 15:03:34
两个表,各自的主键有重复,想把一个表的重复行都加到另一个表的对应行的内容后面要怎么写 
各自主键上相互有重复

主键          主键
1     1 2 3    1  2 2 2
2     1 2 3    2  2 2 2 
3     3 3 3    4  4 4 4 
把1,2后面的加到前一个1,2上面 

10 个解决方案

#1



select min(ID),PK1,PK2,sum(f1),sum(f2),sum(f3),sum(f4),sum(f5) from tb group by PK1,PK2

#2


两个表?没看明白,不好意思

#3


该回复于2011-04-21 09:33:01被版主删除

#4


该回复于2011-04-21 09:40:40被版主删除

#5


猜测lz意思如下


use tempdb;
/*
create table A
(
id int not null,
content1 int not null,
content2 int not null,
content3 int not null
);
insert into A(id,content1,content2,content3)
values
(1,1,2,3),
(2,1,2,3),
(3,3,3,3);

create table B
(
id int not null,
content1 int not null,
content2 int not null,
content3 int not null
);
insert into B(id,content1,content2,content3)
values
(1,2,2,2),
(2,2,2,2),
(4,4,4,4);
*/
select A.*,B.content1,B.content2,B.content3
from A
join B on A.id = B.id;


显示结果:
1 1 2 3 2 2 2
2 1 2 3 2 2 2

#6


如果楼上没理解错楼主意思的话,那就是正确的,就是一个联合查询的问题!楼主可以查一下,内联接,外联接!

#7


lf19820717和各位的回答对我的很有启发
不好意思,问题表述的不准确

表一        表二
主键        主键
1 1 2 3     1 2 2 2
2 1 2 3     2 2 2 2  
3 3 3 3     4 4 4 4 

最后的结果希望是
1 1+2 2+2 3+2
2 1+2 2+2 3+2
3 3   3   3
4 4   4   4

#8


table1 
主键id content1 content2 content3
1 1 2 3 
2 1 2 3 
3 3 3 3 

table2
主键id content1 content2 content3
1 2 2 2
2 2 2 2   
4 4 4 4 



最后的结果希望是
1 1+2 2+2 3+2
2 1+2 2+2 3+2
3 3 3 3
4 4 4 4

#9



use tempdb;
/*
create table table1
(
    id int not null,
    content1 int not null,
    content2 int not null,
    content3 int not null
);
insert into table1(id,content1,content2,content3)
values
(1,1,2,3),
(2,1,2,3),
(3,3,3,3);

create table table2
(
    id int not null,
    content1 int not null,
    content2 int not null,
    content3 int not null
);
insert into table2(id,content1,content2,content3)
values
(1,2,2,2),
(2,2,2,2),
(4,4,4,4);
*/
select 
ISNULL(t1.id,t2.id) as [id],
ISNULL(t1.content1,0) + ISNULL(t2.content1,0) as [content1],
ISNULL(t1.content2,0) + ISNULL(t2.content2,0) as [content2],
ISNULL(t1.content3,0) + ISNULL(t2.content3,0) as [content3]
from table1 as t1
full join table2 as t2 on t1.id = t2.id;

#10


嗯,楼上正解

#1



select min(ID),PK1,PK2,sum(f1),sum(f2),sum(f3),sum(f4),sum(f5) from tb group by PK1,PK2

#2


两个表?没看明白,不好意思

#3


该回复于2011-04-21 09:33:01被版主删除

#4


该回复于2011-04-21 09:40:40被版主删除

#5


猜测lz意思如下


use tempdb;
/*
create table A
(
id int not null,
content1 int not null,
content2 int not null,
content3 int not null
);
insert into A(id,content1,content2,content3)
values
(1,1,2,3),
(2,1,2,3),
(3,3,3,3);

create table B
(
id int not null,
content1 int not null,
content2 int not null,
content3 int not null
);
insert into B(id,content1,content2,content3)
values
(1,2,2,2),
(2,2,2,2),
(4,4,4,4);
*/
select A.*,B.content1,B.content2,B.content3
from A
join B on A.id = B.id;


显示结果:
1 1 2 3 2 2 2
2 1 2 3 2 2 2

#6


如果楼上没理解错楼主意思的话,那就是正确的,就是一个联合查询的问题!楼主可以查一下,内联接,外联接!

#7


lf19820717和各位的回答对我的很有启发
不好意思,问题表述的不准确

表一        表二
主键        主键
1 1 2 3     1 2 2 2
2 1 2 3     2 2 2 2  
3 3 3 3     4 4 4 4 

最后的结果希望是
1 1+2 2+2 3+2
2 1+2 2+2 3+2
3 3   3   3
4 4   4   4

#8


table1 
主键id content1 content2 content3
1 1 2 3 
2 1 2 3 
3 3 3 3 

table2
主键id content1 content2 content3
1 2 2 2
2 2 2 2   
4 4 4 4 



最后的结果希望是
1 1+2 2+2 3+2
2 1+2 2+2 3+2
3 3 3 3
4 4 4 4

#9



use tempdb;
/*
create table table1
(
    id int not null,
    content1 int not null,
    content2 int not null,
    content3 int not null
);
insert into table1(id,content1,content2,content3)
values
(1,1,2,3),
(2,1,2,3),
(3,3,3,3);

create table table2
(
    id int not null,
    content1 int not null,
    content2 int not null,
    content3 int not null
);
insert into table2(id,content1,content2,content3)
values
(1,2,2,2),
(2,2,2,2),
(4,4,4,4);
*/
select 
ISNULL(t1.id,t2.id) as [id],
ISNULL(t1.content1,0) + ISNULL(t2.content1,0) as [content1],
ISNULL(t1.content2,0) + ISNULL(t2.content2,0) as [content2],
ISNULL(t1.content3,0) + ISNULL(t2.content3,0) as [content3]
from table1 as t1
full join table2 as t2 on t1.id = t2.id;

#10


嗯,楼上正解