没有顺序的 SQL Server 计数查询

Posted

技术标签:

【中文标题】没有顺序的 SQL Server 计数查询【英文标题】:SQL Server Count Query with no order 【发布时间】: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 顺序排序,但我希望它按照我请求的顺序进行,我希望第一个查询始终是结果中的第一个,无论值是什么。感谢您的帮助。

【问题讨论】:

【参考方案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 之间不应有空格。应该有一个点。或者干脆省略表名,因为这里不需要。

【讨论】:

以上是关于没有顺序的 SQL Server 计数查询的主要内容,如果未能解决你的问题,请参考以下文章

sql SQL Server查询表行计数

SQL Server 计数查询

如何在一个 SQL Server 查询中组合不同的计数

SQL Server 2016 可以在一个事务中重新排列多个查询的顺序吗?

带有分页和计数的 SQL Server 查询

SQL Server 2008 R2 - sqlcmd bat 文件在文件夹中运行一批 sql 查询,但它们没有按文件名的顺序运行