高分求: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
展开
 我来答
百度网友e89d670f9
2010-10-09 · TA获得超过148个赞
知道小有建树答主
回答量:179
采纳率:0%
帮助的人:114万
展开全部
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
horsoner
2010-10-09 · TA获得超过238个赞
知道小有建树答主
回答量:141
采纳率:0%
帮助的人:197万
展开全部
既然你知道是因为"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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式