SQL查询中的返回编号

时间:2013-02-27 19:52:07

标签: sql oracle oracle11g

我有这个Oracle SQL查询,用于将组件计入表中:

 select ct.name as component_type, count(1) as cnt from componentstats cs, componenttype ct
WHERE CS.COMPONENTTYPEID = CT.COMPONENTTYPEID AND CT.COMPONENTTYPEID IN (1000, 1300, 4000)
group by ct.name  order by ct.name;

这是输出:

COMPONENT_TYPE                                                                                       CNT                    
---------------------------------------------------------------------------------------------------- ---------------------- 
DATACENTER                                                                                           1                      
ISP                                                                                                  1                      
NETWORK                                                                                              1                      

我注意到如果没有类型为1300的组件我得到两个值1和1.我需要得到结果1,0,1,因为数字的顺序必须严格。你能告诉我如何解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

您需要一个外部联接。这是您应该使用标准ANSI连接语法的一个很好的理由。

您还需要将count()更改为从外部联接的“外部”部分计数。以下是使用left outer join编写的查询:

select ct.name as component_type, count(cs.componenttypeid) as cnt
from componenttype ct left outer join
     componentstats cs
     on CS.COMPONENTTYPEID = CT.COMPONENTTYPEID
where CT.COMPONENTTYPEID IN (1000, 1300, 4000)
group by ct.name
order by ct.name;