select语句总是在执行时返回3行

时间:2013-09-24 13:54:54

标签: sql sql-server select

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

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

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

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

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

5 个答案:

答案 0 :(得分:4)

重新设计将是一种更好的方法,但如果您现在无法做到这一点并确定这三种颜色,请尝试以下方法:

<强> Fiddle demo

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

答案 1 :(得分:1)

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

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

答案 2 :(得分: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

使用UNION确保您想要的行显示在结果中。

答案 3 :(得分: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

答案 4 :(得分:0)

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

select c.color, sum(clrcount)
from colors c
left join tmp t on t.color = c.color
group by c.color