【问题标题】:select statement to always return 3 rows on execution选择语句总是在执行时返回 3 行
【发布时间】:2013-09-24 13:54:53
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: sql sql-server select


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 是的,我正要说同样的话,我看到了你的回答。如果 AMBER 被删除,你如何分组和选择它?
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:
        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
        

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-01-31
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多