22,209
社区成员
发帖
与我相关
我的任务
分享
select a._name,a._sex,a._age,
sum(case when _sent=1 then 1 else 0 end) as _sent,
sum(case when _sent=1 then 0 else 1 end) as _nosent
from users as a,users_contact as b
where a._name=b._name
group by a._name,a._sex,a._age
select a._name,a._sex,a._age ---加 ,a._sex,a._age
_sent=sum(case when _sent=1 then 1 else 0 end),
_nosent=sum(case when _sent=1 then 0 else 1 end)
from users a
left join users_contact b
on a._name=b._name ---修改下
group by a._name,a._sex,a._age ---加 ,a._sex,a._age
select a._name,
_sent=sum(case when _sent=1 then 1 else 0 end),
_nosent=sum(case when _sent=1 then 0 else 1 end)
from users a
left join users_contact b
on a._name=b._name ---修改下
group by a._name
select a._name,
_sent=sum(case when _sent=1 then 1 else 0 end),
_nosent=sum(case when _sent=1 then 0 else 1 end)
from users a
left join users_contact b
on a._id=b._id
group by a._name
---小卒的代码应该这样修改:
select a._name,
_sent=sum(case when _sent=1 then 1 else 0 end), --这样:在else语句中就包括了空值(当用户users_contact表中无记录时)
_nosent=sum(case when _sent=0 then 1 else 0 end)
from users a
left join users_contact b
on a._name=b._name
group by a._name
drop table users;
drop table users_contact;
create table users
(
_id int identity(1,1),
_name varchar(200)
)
insert into users(_name) values('aaa')
insert into users(_name) values('bbb')
insert into users(_name) values('ccc')
--共2000条
create table users_contact
(
_id int identity(1,1),
_name varchar(200),
_email varchar(200),
_sent int default 0
)
insert into users_contact(_name,_email) values('aaa','aaa1@126.com')
insert into users_contact(_name,_email) values('aaa','aaa2@126.com')
insert into users_contact(_name,_email) values('bbb','bbb1@126.com')
select a._name,
_sent=sum(case when _sent=1 then 1 else 0 end),
_nosent=sum(case when _sent=1 then 0 else 1 end)
from users a
left join users_contact b
on a._name=b._name ---修改下
group by a._name
------------------------------------------
aaa 0 2
bbb 0 1
ccc 0 1
--楼主:你那users表和users_contact的_id字段都用identity,这样对吗?
--那就两表不能通过_id来关联了,只能通过_name来关联?
create table users
(
_id int identity(1,1),
_name varchar(200)
)
insert into users(_name) values('aaa')
insert into users(_name) values('bbb')
insert into users(_name) values('ccc')
--共2000条
create table users_contact
(
_id int identity(1,1),
_name varchar(200),
_email varchar(200),
_sent int default 0
)
insert into users_contact(_name,_email) values('aaa','aaa1@126.com')
insert into users_contact(_name,_email) values('aaa','aaa2@126.com')
insert into users_contact(_name,_email) values('bbb','bbb1@126.com')
select * from users_contact uc;
create table #tb
(
_indx int identity(1,1),
_id int,
_name varchar(200),
_sent int,
_nosent int
)
delete from #tb;
insert into #tb(_id,_name,_sent,_nosent)
select u._id,u._name,isnull(t._sent,0) _sent,isnull(t._nosent,0) _nosent
from users u left join ( select _name,
sum(case when uc._sent=1 then 1 else 0 end) as _sent,
sum(case when uc._sent=1 then 0 else 1 end) as _nosent
from users_contact uc group by uc._name ) t on u._name=t._name
order by u._name;
select * from #tb;