我有一个选择语句,它总是只返回 3 行。一列具有静态值 RED AMBER 和 GREEN。
http://sqlfiddle.com/#!6/5e107/2
在小提琴链接中,我有一个示例代码。
select color,SUM(clrcount) from
tmp group by color
执行时返回 3 行。但是,如果我删除标记为 AMBER 的项目,然后进行分组,则只返回两行。我需要始终返回 3 行。AMBER 行的计数可以为 0
我有一个选择语句,它总是只返回 3 行。一列具有静态值 RED AMBER 和 GREEN。
http://sqlfiddle.com/#!6/5e107/2
在小提琴链接中,我有一个示例代码。
select color,SUM(clrcount) from
tmp group by color
执行时返回 3 行。但是,如果我删除标记为 AMBER 的项目,然后进行分组,则只返回两行。我需要始终返回 3 行。AMBER 行的计数可以为 0
重新设计将是一种更好的方法,但如果您现在不能这样做并且确定这三种颜色,请尝试以下操作:
select t.color,coalesce(sum(clrcount),0) colorCount
from tmp right join
(values('RED'),('AMBER'),('GREEN')) As t(color)
on tmp.color = t.color
group by t.color
您需要为这些行设置 clrcount = 0 而不是删除琥珀色行 - 这将适用于您当前的查询。
但是,如果必须删除它们,那么 Joel Coehoorn 的答案就是您要走的路。
要使用问题中存在的架构,您应该能够执行以下操作:
SELECT color, MAX(clrcount) AS clrcount
FROM (
SELECT color, COUNT(clrcount) AS clrcount
FROM tmp T
GROUP BY color
UNION ALL SELECT 'RED', 0
UNION ALL SELECT 'AMBER', 0
UNION ALL SELECT 'GREEN', 0
) A
GROUP BY color
使用 aUNION
确保您想要的行出现在结果中。
select color,SUM(clrcount) from
(SELECT * from tmp
UNION ALL
SELECT 'RED',0
UNION ALL
SELECT 'AMBER',0
UNION ALL
SELECT 'GREEN',0)temp
group by color
您需要一个单独的表格来定义您可能的颜色。然后你加入它,像这样:
select c.color, sum(clrcount)
from colors c
left join tmp t on t.color = c.color
group by c.color