22,210
社区成员
发帖
与我相关
我的任务
分享
create table a(id int,name varchar(10),newname varchar(10),prjname varchar(10))
insert into a select 1,'zs','ls','prj1'
insert into a select 2,'zs','ww','prj2'
insert into a select 3,'ls','ww','prj3'
insert into a select 4,'ls','zs','prj4'
insert into a select 5,'ww','zs','prj5'
insert into a select 6,'zs','wmz','prj6'
create table b(id int,aid int,type int)
insert into b select 1,1,0
insert into b select 2,2,1
insert into b select 3,1,1
insert into b select 4,2,0
insert into b select 5,1,1
insert into b select 6,2,0
insert into b select 7,3,1
insert into b select 8,4,1
insert into b select 9,5,0
insert into b select 10,6,1
go
select name,
(select count(*) from a where name=t.name)namecount,
(select count(*) from a where newname=t.name)newnamecount,
(select count(*) from a where name=t.name)+(select count(*) from a where newname=t.name) countName,
(select count(*) from a inner join b on a.id=b.aid and a.name=t.name and b.type=1)type1name,
(select count(*) from a inner join b on a.id=b.aid and a.newname=t.name and b.type=1)type1newname,
(select count(*) from a inner join b on a.id=b.aid and a.name=t.name and b.type=1)+
(select count(*) from a inner join b on a.id=b.aid and a.newname=t.name and b.type=1)counttype1,
(select count(*) from a inner join b on a.id=b.aid and a.name=t.name and b.type=0)type0name,
(select count(*) from a inner join b on a.id=b.aid and a.newname=t.name and b.type=0)type0name,
(select count(*) from a inner join b on a.id=b.aid and a.name=t.name and b.type=0)+
(select count(*) from a inner join b on a.id=b.aid and a.newname=t.name and b.type=0)counttype0
from(
select name from a
union
select newname from a
)t group by name
/*
name namecount newnamecount countName type1name type1newname counttype1 type0name type0name counttype0
---------- ----------- ------------ ----------- ----------- ------------ ----------- ----------- ----------- -----------
ls 2 1 3 2 2 4 0 1 1
wmz 0 1 1 0 1 1 0 0 0
ww 1 2 3 0 2 2 1 2 3
zs 3 2 5 4 1 5 3 1 4
(4 行受影响)
*/
go
drop table a,b
select [name],
(select count(*) from a where [name]=t.[name])namecount,
(select count(*) from a where newname=t.[name])newnamecount,
countName=(select count(*) from a where name=t.name or newname=t.name),
(select count(*) from a innner join b on a.id=b.aid and a.[name]=t.[name] and b.[type]=1)type1name,
(select count(*) from a innner join b on a.id=b.aid and a.newname=t.[name] and b.[type]=1)type1name,
(select count(*) from b where [type]=1)counttype1,
(select count(*) from a innner join b on a.id=b.aid and a.[name]=t.[name] and b.[type]=0)type0name,
(select count(*) from a innner join b on a.id=b.aid and a.newname=t.[name] and b.[type]=0)type0name,
(select count(*) from b where [type]=0)counttype0
from(
select [name] from a
union
select newname from a
)t
select [name],
(select count(*) from a where [name]=t.[name])namecount,
(select count(*) from a where newname=t.[name])newnamecount,
countName=(select count(*) from a where name=t.name or newname=t.name),
(select count(*) from a innner join b on a.id=b.aid and a.[name]=t.[name] and b.[type]=1)type1name,
(select count(*) from a innner join b on a.id=b.aid and a.newname=t.[name] and b.[type]=1)type1name,
(select count(*) from b where [type]=1)counttype1,
(select count(*) from a innner join b on a.id=b.aid and a.[name]=t.[name] and b.[type]=0)type0name,
(select count(*) from a innner join b on a.id=b.aid and a.newname=t.[name] and b.[type]=0)type0name,
(select count(*) from b where [type]=0)counttype0
from(
select [name] from a
union
select newname from a
)t
select name,
(select count(*) from a where name=t.name)namecount,
(select count(*) from a where newname=t.name)newnamecount,
count(*) countName,
(select count(*) from a innner join b on a.id=b.id and a.name=t.name and b.type=1)type1name,
(select count(*) from a innner join b on a.id=b.id and a.newname=t.name and b.type=1)type1name,
(select count(*) from b where type=1)counttype1,
(select count(*) from a innner join b on a.id=b.id and a.name=t.name and b.type=0)type0name,
(select count(*) from a innner join b on a.id=b.id and a.newname=t.name and b.type=0)type0name,
(select count(*) from b where type=0)counttype0
from(
select name from a
union
select newname from a
)t