34,594
社区成员
发帖
与我相关
我的任务
分享
select id ,
log1num=(select isnull(sum(num),0) from table_log1 where id=M.id),
log2num=(select isnull(sum(num),0) from table_log2 where id=M.id)
from table_primary M
create table 主表(id varchar(10))
insert into 主表 values('001')
insert into 主表 values('002')
create table 子表1(id varchar(10), num int)
insert into 子表1 values('001', 2)
insert into 子表1 values('001', 3)
insert into 子表1 values('002', 1)
create table 子表2(id varchar(10), num int)
insert into 子表2 values('001', 4)
insert into 子表2 values('002', 2)
go
select t.id ,
log1num = (select sum(num) from 子表1 where id = t.id),
log1num = (select sum(num) from 子表2 where id = t.id)
from 主表 t
drop table 主表,子表1,子表2
/*
id log1num log2num
---------- ----------- -----------
001 5 4
002 1 2
(2 行受影响)
*/
--另外一种.
create table 主表(id varchar(10))
insert into 主表 values('001')
insert into 主表 values('002')
create table 子表1(id varchar(10), num int)
insert into 子表1 values('001', 2)
insert into 子表1 values('001', 3)
insert into 子表1 values('002', 1)
create table 子表2(id varchar(10), num int)
insert into 子表2 values('001', 4)
insert into 子表2 values('002', 2)
go
select t.id ,
log1num = (select sum(num) from 子表1 where id = t.id),
log1num = (select sum(num) from 子表2 where id = t.id)
from 主表 t
group by id
drop table 主表,子表1,子表2
/*
id log1num log2num
---------- ----------- -----------
001 5 4
002 1 2
(2 行受影响)
*/
create table 主表(id varchar(10))
insert into 主表 values('001')
insert into 主表 values('002')
create table 子表1(id varchar(10), num int)
insert into 子表1 values('001', 2)
insert into 子表1 values('001', 3)
insert into 子表1 values('002', 1)
create table 子表2(id varchar(10), num int)
insert into 子表2 values('001', 4)
insert into 子表2 values('002', 2)
go
select t.id , isnull(t1.log1num,0) log1num , isnull(t2.log2num,0) log2num from 主表 t
left join (select id , sum(num) log1num from 子表1 group by id) t1 on t.id = t1.id
left join (select id , sum(num) log2num from 子表2 group by id) t2 on t.id = t2.id
drop table 主表,子表1,子表2
/*
id log1num log2num
---------- ----------- -----------
001 5 4
002 1 2
(2 行受影响)
*/
简化一下也可:
select id ,
log1num=(select sum(num) from b where id=a.id),
log2num=(select sum(num) from c where id=a.id)
from a
create table a(id char(3))
insert a select '001' union all select '002'
create table b(id char(3),num int)
insert b select '001',2 union all select '001',3 union all select '002',1
create table c(id char(3),num int)
insert c select '001',4 union all select '002',2
select id ,
log1num=(select num from (select id,sum(num) num from b group by id)aa where id=a.id),
log2num=(select num from (select id,sum(num) num from c group by id)bb where id=a.id)
from a
--result
/*id log1num log2num
---- ----------- -----------
001 5 4
002 1 2
(所影响的行数为 2 行)*/
select a.id , isnull(t1.log1num,0) log1num , isnull(t2.log2num,0) log2num from 主表 t
left join (select id , sum(num) log1num from 子表1 group by id) t1 on t.id = t1.id
left join (select id , sum(num) log2num from 子表2 group by id) t2 on t.id = t2.id
--try
select M.id, log1num=isnull(S1.num,0), log2num=isnull(S2.num,0)
from table_primary M
left join (select id, num=sum(num) from table_log1 group by id) S1 on M.id=S1.id
left join (select id, num=sum(num) from table_log2 group by id) S2 on M.id=S2.id
select t1.id,a.num1,b.num2 from
t1 left join
(select id, sum(num) num1 from t2 group by id) a on t1.id=a.id
left join (select id, sum(num) num2 from t3 group by id) b on t1.id=b.id