34,576
社区成员
发帖
与我相关
我的任务
分享
declare @curdate datetime
set @curdate='2008-10-6'
select a.d_id,a.d_name,isnull(b.allcount,0) as 发行数量,isnull(b.lostcount,0) as 过期数量
from t_d a left join
(select d_id,count(*) allcount,sum(case when lost_time<@curdate then 1 else 0 end) lostcount
from t_e group by d_id) b
on a.d_id=b.d_id
create table t_d(
d_id int identity(1,1) primary key,
d_name varchar(50), --名称
)
insert into t_d(d_name) values('A')
insert into t_d(d_name) values('B')
insert into t_d(d_name) values('C')
create table t_e(
e_id int identity(1,1) primary key,
d_id int references t_d(d_id),
add_time datetime, --添加日期
lost_time datetime --过期日期
)
insert into t_e (d_id,add_time,lost_time) values(1,'2008-10-4','2008-10-5')
insert into t_e (d_id,add_time,lost_time) values(1,'2008-10-6','2008-10-7')
insert into t_e (d_id,add_time,lost_time) values(1,'2008-10-6','2008-10-8')
insert into t_e (d_id,add_time,lost_time) values(2,'2008-10-6','2008-10-6')
insert into t_e (d_id,add_time,lost_time) values(2,'2008-10-6','2008-10-9')
SELECT td.d_id,td.d_name ,
COUNT(te.e_id) AS 发行数量,
SUM(CASE WHEN DATEDIFF(DAY,te.lost_time,GETDATE())>0 THEN 1 ELSE 0 END) AS 过期数量
FROM t_d AS td
LEFT OUTER JOIN t_e AS te
ON td.d_id=te.d_id
GROUP BY td.d_id,td.d_name
drop table t_e,t_d
/*
d_id d_name 发行数量 过期数量
----------- -------------------------------------------------- ----------- -----------
1 A 3 1
2 B 2 0
3 C 0 0
*/
select
a.d_id
,d_name
,isnull([发行数量],0)
,isnull([过期数量],0)
from t_d b
left join (
select
d_id
,count(1) as [发行数量]
,sum(case when lost_time < @dt then 1 else 0 end) as [过期数量]
from t_e
group by d_id) as a on a.d_id=b.d_id
create table t_d(
d_id int identity(1,1) primary key,
d_name varchar(50), --名称
)
insert into t_d(d_name) values('A')
insert into t_d(d_name) values('B')
insert into t_d(d_name) values('C')
create table t_e(
e_id int identity(1,1) primary key,
d_id int references t_d(d_id),
add_time datetime, --添加日期
lost_time datetime --过期日期
)
insert into t_e (d_id,add_time,lost_time) values(1,'2008-10-4','2008-10-5')
insert into t_e (d_id,add_time,lost_time) values(1,'2008-10-6','2008-10-7')
insert into t_e (d_id,add_time,lost_time) values(1,'2008-10-6','2008-10-8')
insert into t_e (d_id,add_time,lost_time) values(2,'2008-10-6','2008-10-6')
insert into t_e (d_id,add_time,lost_time) values(2,'2008-10-6','2008-10-9')
SELECT td.d_id,td.d_name ,
COUNT(te.e_id) AS 发行数量,
SUM(CASE WHEN te.lost_time<GETDATE() THEN 1 ELSE 0 END) AS 过期数量
FROM t_d AS td
LEFT OUTER JOIN t_e AS te
ON td.d_id=te.d_id
GROUP BY td.d_id,td.d_name
drop table t_e,t_d
/*
d_id d_name 发行数量 过期数量
----------- -------------------------------------------------- ----------- -----------
1 A 3 1
2 B 2 1
3 C 0 0
*/
create table t_d(
d_id int identity(1,1) primary key,
d_name varchar(50), --名称
)
insert into t_d(d_name) values('A')
insert into t_d(d_name) values('B')
insert into t_d(d_name) values('C')
create table t_e(
e_id int identity(1,1) primary key,
d_id int references t_d(d_id),
add_time datetime, --添加日期
lost_time datetime --过期日期
)
insert into t_e (d_id,add_time,lost_time) values(1,'2008-10-4','2008-10-5')
insert into t_e (d_id,add_time,lost_time) values(1,'2008-10-6','2008-10-7')
insert into t_e (d_id,add_time,lost_time) values(1,'2008-10-6','2008-10-8')
insert into t_e (d_id,add_time,lost_time) values(2,'2008-10-6','2008-10-6')
insert into t_e (d_id,add_time,lost_time) values(2,'2008-10-6','2008-10-9')
SELECT td.d_id,td.d_name ,
COUNT(*) AS 发行数量,
SUM(CASE WHEN te.lost_time>GETDATE() THEN 1 ELSE 0 END) AS 过期数量
FROM t_d AS td
LEFT OUTER JOIN t_e AS te
ON td.d_id=te.d_id
GROUP BY td.d_id,td.d_name
drop table t_e,t_d
/*
d_id d_name 发行数量 过期数量
----------- -------------------------------------------------- ----------- -----------
1 A 3 2
2 B 2 1
3 C 1 0
(3 行受影响)
*/
select a.d_id,a.d_name,
count(1) as 发行数量,
sum(case when datediff(dd,b.lost_time,getdate())>0 then 1 else 0 end) as 过期数量
from t_d a left join t_e b on a.d_id=b.d_id
group by a.d_id,a.d_name
select
a.d_id
,d_name
,count(1) as [发行数量]
,sum(case when lost_time < @dt then 1 else 0 end) as [过期数量]
from t_e a
join t_d b on a.d_id=b.d_id
group by a.d_id, d_name