我有一张包含销售ID,产品代码和金额的表格。有些地方的产品代码为空。我想显示缺少而不是null。以下是我的表格。
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
答案 0 :(得分:12)
问题是数据类型不匹配; '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。
答案 1 :(得分:3)
也许您的类型不匹配:
select coalesce(cast(prodTypeCode as varchar(255)), 'Missing' as ProductCode,
SUM(amount)
From sales s
group by prodTypeCode;
我更喜欢coalesce()
到case
,因为它更短。
答案 2 :(得分:1)
我尝试了所有2个答案,但都没有用。我希望此代码段可以对其他人都不起作用:
SELECT
COALESCE(NULLIF(prodTypeCode,''), 'Missing') AS ProductCode,
SUM(amount)
From sales s
group by prodTypeCode;