oracle sql groupby后 无记录 怎么使count()=0

tony2009 2012-07-05 11:44:47
SELECT A.ab,B.bc,count(1)
FROM A,B
WHERE A.id=B.id
GROUP BY A.ab,B.bc;
因为B表里没有和A表相对应的id,所以查询结果没有记录,
但想在没有记录的时候使count(1)=0怎么写?
SELECT count(1)
FROM A,B
WHERE A.id=B.id
GROUP BY A.ab,B.bc;
这样是可以得到count(1)=0,但我也想当A.id=B.id的时候,取得字段A.ab的值,所以。。。
...全文
973 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
smnzg 2012-07-17
  • 打赏
  • 举报
回复
SELECT A.ab,B.bc,sum(decoe(B.BC,NULL,0,1))
FROM A,B
WHERE A.id=B.id(+)
GROUP BY A.ab,B.bc;

使用右关联,并判断,如果b.bc是空的时候,值为0,否则值为1.这样计算出来到值应该不会有偏差.
geeforce 2012-07-06
  • 打赏
  • 举报
回复
SELECT DECODE(COUNT(*),0,COUNT(*),A.ab||','||B.bc)
FROM A,B
WHERE A.id=B.id
GROUP BY A.ab,B.bc;

iqlife 2012-07-05
  • 打赏
  • 举报
回复
SELECT A.ab,B.bc,count(1)
FROM A,B
WHERE A.id=B.id
GROUP BY A.ab,B.bc;

没有记录就直接为空,有什么问题???

显示0的话,则去掉AB字段即可

SELECT count(1)
FROM A,B
WHERE A.id=B.id
GROUP BY A.ab,B.bc;
xpingping 2012-07-05
  • 打赏
  • 举报
回复
上面count有误
SELECT 
A.ab,
B.bc,
count(B.id)
FROM A,B
WHERE A.id=B.id(+)
GROUP BY A.ab,B.bc;
xpingping 2012-07-05
  • 打赏
  • 举报
回复
SELECT A.ab,B.bc,count(1)
FROM A,B
WHERE A.id=B.id(+)
GROUP BY A.ab,B.bc;
tony2009 2012-07-05
  • 打赏
  • 举报
回复
楼上
select case when count(1)=0 then C.ab
when count(1)>0 then C.bc
else 'xxx' end
from
(
SELECT A.ab,B.bc
FROM A,B
WHERE A.id=B.id
UNION ALL
SELECT NULL,NULL
FROM DUAL

) C
GROUP BY A.ab,B.bc
这样也可以实现效果
tony2009 2012-07-05
  • 打赏
  • 举报
回复
楼上
select case when count(1)=0 then C.ab
when count(1)>0 then C.bc
else 'xxx' end
from
(
SELECT A.ab,B.bc
FROM A,B
WHERE A.id=B.id
) C
GROUP BY A.ab,B.bc
当虚拟表C没有记录,怎样使count(1)=0?
tony2009 2012-07-05
  • 打赏
  • 举报
回复
楼上
select count(1)
from
(
SELECT A.ab,B.bc
FROM A,B
WHERE A.id=B.id
) C
GROUP BY A.ab,B.bc
当虚拟表C没有记录,怎样使count(1)=0?

3,494

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧