2016-03-04 42 views
2

我有一个包含销售ID,产品代码和金额的表。有些地方产品代码为空。我想显示缺少而不是null。下面是我的桌子。postgres中空值的选择查询中的默认值

salesId  prodTypeCode amount 
1   123    150 
2   123    200 
3   234    3000 
4   234    400 
5   234    500 
6   123    200 
7   111    40 
8   111    500 
9       1000 
10   123    100 

我想的选项,用于显示每个prodTypeCode总量如果prodTypeCode为null,则缺少应显示。

select (CASE WHEN prodTypeCode IS NULL THEN 
    'Missing' 
    ELSE 
    prodTypeCode 
    END) as ProductCode, SUM(amount) From sales group by prodTypeCode 

上面的查询给出错误。请建议我解决这个问题。我已经创建了一个SQLFIDDLE

回答

5

问题是数据类型不匹配; 'Missing'是文本,但产品类型代码是数字。

铸造产品类型代码为文本以便这两个值兼容:

select (CASE WHEN prodTypeCode IS NULL THEN 
    'Missing' 
    ELSE 
    prodTypeCode::varchar(40) 
    END) as ProductCode, SUM(amount) From sales group by prodTypeCode 

SQLFiddle

或者简单:

select coalesce(prodTypeCode::varchar(40), 'Missing') ProductCode, SUM(amount) 
from sales 
group by prodTypeCode 

SQLFiddle

3

也许你有一个类型不匹配:

select coalesce(cast(prodTypeCode as varchar(255)), 'Missing' as ProductCode,  
     SUM(amount) 
From sales s 
group by prodTypeCode; 

我喜欢coalesce()case,只是因为它是短。