高分求:SQL一张表中统计符合两个条件的行数
现在有个表中有ID,type,B,C个字段列,其中B,C列为日期列如下typeBCCID12010-9-112010-9-11A112010-10-22010-10-2A...
现在有个表中有ID,type,B,C个字段列,其中B,C列为日期列 如下
type B C CID
1 2010-9-11 2010-9-11 A1
1 2010-10-2 2010-10-2 A1
2 2010-10-2 2010-10-3 A1
1 2010-10-4 ... A3
2 2010-8-1 ... A1
2 2010-10-4 .... A4
1 2010-9-4 .... A2
我要的结果是 统计各个CID tpye字段1,2类的的行数,如果type=1则统计B字段时间是否大于2010-10-1如果type=2则统计C字段时间是否大于2010-10-1 .
结果是下面这种格式
CID 1数量 2数量 总数量
A1 2 1 3
A2 1 1 2
A3 2 2 4
然后我写的语句是这样的:
select isnull(r.[imail],0) as imail,isnull(t.[omail],0) as omail,isnull(r.[imail],0)+isnull(t.[omail],0)as summail from
(select [imail]=count(1),cid from 表 where type='1' and B>2010-10-01)group by id) R
left join
(select [omail]=count(1),cid from 表 where type='2' and C>2010-10-01) group by id) T
on r.cid=t.cid
现在的问题就是当A2或者其他CID字段中只存在一个type是A2就无法统计,我猜原因很可能第一个条件时就过滤了没有包含type为1的CID 导致无法查询.
现在求高手指教 小弟真的想破头也弄不出来
恩我也试过full join ,用full join的话是可以统计数量但无法列出CID 也就是无法知道这个行数是属于哪个CID 展开
type B C CID
1 2010-9-11 2010-9-11 A1
1 2010-10-2 2010-10-2 A1
2 2010-10-2 2010-10-3 A1
1 2010-10-4 ... A3
2 2010-8-1 ... A1
2 2010-10-4 .... A4
1 2010-9-4 .... A2
我要的结果是 统计各个CID tpye字段1,2类的的行数,如果type=1则统计B字段时间是否大于2010-10-1如果type=2则统计C字段时间是否大于2010-10-1 .
结果是下面这种格式
CID 1数量 2数量 总数量
A1 2 1 3
A2 1 1 2
A3 2 2 4
然后我写的语句是这样的:
select isnull(r.[imail],0) as imail,isnull(t.[omail],0) as omail,isnull(r.[imail],0)+isnull(t.[omail],0)as summail from
(select [imail]=count(1),cid from 表 where type='1' and B>2010-10-01)group by id) R
left join
(select [omail]=count(1),cid from 表 where type='2' and C>2010-10-01) group by id) T
on r.cid=t.cid
现在的问题就是当A2或者其他CID字段中只存在一个type是A2就无法统计,我猜原因很可能第一个条件时就过滤了没有包含type为1的CID 导致无法查询.
现在求高手指教 小弟真的想破头也弄不出来
恩我也试过full join ,用full join的话是可以统计数量但无法列出CID 也就是无法知道这个行数是属于哪个CID 展开
展开全部
select cid,sum(case when type='1' and b>'2010-10-14' then 1 else 0 end) as [1数量],sum(case when type='2' and c>'2010-10-1' then 1 else 0 end) as [2数量] ,
sum(case when type='1' and b>'2010-10-14' then 1 else 0 end)+sum(case when type='2' and c>'2010-10-1' then 1 else 0 end) 总数量
FROM #HAO
GROUP BY CID
sum(case when type='1' and b>'2010-10-14' then 1 else 0 end)+sum(case when type='2' and c>'2010-10-1' then 1 else 0 end) 总数量
FROM #HAO
GROUP BY CID
展开全部
既然你知道是因为"CID字段中只存在一个Type是2"的时候出问题,很明显只要把你的left join改成 full join 就可以了!
这样当"CID字段中只存在一个Type是2"的时候imail就是null啦
select isnull(r.[imail],0) as imail,isnull(t.[omail],0) as omail,isnull(r.[imail],0)+isnull(t.[omail],0)as summail from
(select [imail]=count(1),cid from 表 where type='1' and B>2010-10-01)group by id) R
full join
(select [omail]=count(1),cid from 表 where type='2' and C>2010-10-01) group by id) T
on r.cid=t.cid
这样当"CID字段中只存在一个Type是2"的时候imail就是null啦
select isnull(r.[imail],0) as imail,isnull(t.[omail],0) as omail,isnull(r.[imail],0)+isnull(t.[omail],0)as summail from
(select [imail]=count(1),cid from 表 where type='1' and B>2010-10-01)group by id) R
full join
(select [omail]=count(1),cid from 表 where type='2' and C>2010-10-01) group by id) T
on r.cid=t.cid
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询