1

我有一个选择语句,它总是只返回 3 行。一列具有静态值 RED AMBER 和 GREEN。

http://sqlfiddle.com/#!6/5e107/2

在小提琴链接中,我有一个示例代码。

 select color,SUM(clrcount) from 
 tmp group by color 

执行时返回 3 行。但是,如果我删除标记为 AMBER 的项目,然后进行分组,则只返回两行。我需要始终返回 3 行。AMBER 行的计数可以为 0

4

5 回答 5

4

重新设计将是一种更好的方法,但如果您现在不能这样做并且确定这三种颜色,请尝试以下操作:

小提琴演示

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
于 2013-09-24T14:05:54.107 回答
1

您需要为这些行设置 clrcount = 0 而不是删除琥珀色行 - 这将适用于您当前的查询。

但是,如果必须删除它们,那么 Joel Coehoorn 的答案就是您要走的路。

于 2013-09-24T14:05:02.530 回答
1

要使用问题中存在的架构,您应该能够执行以下操作:

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确保您想要的行出现在结果中。

于 2013-09-24T14:06:28.750 回答
1
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
于 2013-09-24T14:12:17.200 回答
0

您需要一个单独的表格来定义您可能的颜色。然后你加入它,像这样:

select c.color, sum(clrcount)
from colors c
left join tmp t on t.color = c.color
group by c.color
于 2013-09-24T13:58:41.850 回答