2016-03-04 76 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,只是因爲它是短。