没有顺序的 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 Server 2016 可以在一个事务中重新排列多个查询的顺序吗?
SQL Server 2008 R2 - sqlcmd bat 文件在文件夹中运行一批 sql 查询,但它们没有按文件名的顺序运行