【问题标题】:SQL Server Count Query with no order没有顺序的 SQL Server 计数查询
【发布时间】:2010-12-16 22:32:17
【问题描述】:

我有一系列由 UNION egg 捆绑在一起的选择计数查询

Select Count(Column1) From Table1 where Table1 column1 = 1
union 
Select Count(Column2) From Table1 where Table1 column2 = 1 

它工作正常,但它只是按 asc 或 desc 顺序排序,但我希望它按照我请求的顺序进行,我希望第一个查询始终是结果中的第一个,无论值是什么。感谢您的帮助。

【问题讨论】:

    标签: sql


    【解决方案1】:

    运行两个查询?

    【讨论】:

      【解决方案2】:

      您可以添加一列并对其进行排序

      Select 1 as sequence, Count(Column1) From Table1 where Table1 column1 = 1
      union 
      Select 2 as sequence, Count(Column2) From Table1 where Table1 column2 = 1
      ORDER BY sequence
      

      【讨论】:

        【解决方案3】:

        试试这个:

        SELECT COUNT(*) AS cnt, 1 AS SortOrder FROM Table1 WHERE column1 = 1
        UNION ALL
        SELECT COUNT(*) AS cnt, 2 AS SortOrder FROM Table1 WHERE column2 = 1 
        ORDER BY SortOrder
        

        我所做的主要更改是添加一个可用于 ORDER BY 的列。我所做的其他一些更改:

        • 你的意思不是UNION,你的意思是UNION ALL。否则,如果计数相同,您的查询只会得到一行。在新查询中,这不会发生,但您仍应使用 UNION ALL,因为这在语义上就是您的意思。
        • 编写COUNT(column1) 是不必要的,因为您的WHERE 子句保证column1 永远不会为NULL。使用COUNT(*)。我想即使你写了COUNT(column1),大多数数据库也会看到 column1 不能为 NULL 并省略不必要的 NULL 检查,但再次明确没有错 - 你想计算所有行,COUNT(*) 清楚地说明了这一点。
        • Table1 column1 之间不应有空格。应该有一个点。或者干脆省略表名,因为这里不需要。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-09-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-27
          相关资源
          最近更新 更多