0

我正在寻找 14 行,但这里只有 13 行。

我在左表中有 7 个 AGENCY_CODE,我希望右表中的每个 PROJECT_TYPE 都有一行。这很容易,除非没有一个机构代码的第二个(缓解)项目类型的记录,但我需要它显示,所以当我将它分成两个表时,它们的大小相同。

select i.project_type,a.agency_code,
a.agency_desc,a.sort_order,
sum(case when i.status_code='DES' then 1 else 0 end) as 'Design',
sum(case when i.status_code='ONG' then 1 else 0 end) as 'Construction'

from agencyLookup a 

left join sandy_imp_demographics i on substring(i.category,1,1)=a.agency_code 

group by i.projecT_type,a.agency_code,a.agency_desc,a.sort_order

您会看到 Agency_code G 缺少缓解措施。

project_type    agency_code
Mitigation         D    
Mitigation         L    
Mitigation         M    
Mitigation         S    
Mitigation         T    
Mitigation         U    
Recovery           D    
Recovery           G    
Recovery           L    
Recovery           M    
Recovery           S    
Recovery           T    
Recovery           U

那么我缺少什么来获取机构代码 G 的 null/0 行?

编辑:进一步考虑这一点,这不是左连接问题,而是一个一组。我加入了 Agency_desc 以获取更多信息,但实际的组字段是问题所在。

select substring(i.category,1,1),i.project_type
from sandy_imp_demographics i
group by substring(i.category,1,1),i.project_type

A 组有机构代码,其中 7 个,但其中一个没有缓解项目类型。无论如何,我如何让它显示出来,我最终提取的值是空值?

编辑:没有分组的表样本

(No column name)    project_type
D                 Mitigation
D                 Mitigation
D                 Mitigation
G                 Recovery
G                 Recovery
G                 Recovery
G                 Recovery
L                 Mitigation
L                 Mitigation
L                 Recovery

这是第一列中的 G 值没有显示出来。

4

1 回答 1

0

这是因为您的聚合正在使用 LEFT JOIN 中的表列。您必须为空值添加案例。

select i.project_type,a.agency_code,
a.agency_desc,a.sort_order,
sum(case when i.status_code='DES' then 1 when i.status_code is null then 0 else 0 end) as 'Design',
sum(case when i.status_code='ONG' then 1 when i.status_code is null then 0 else 0 end) as 'Construction'

from agencyLookup a 

left join sandy_imp_demographics i on substring(i.category,1,1)=a.agency_code 

group by i.projecT_type,a.agency_code,a.agency_desc,a.sort_order
于 2013-10-15T20:41:31.817 回答