计算行数而不使用任何聚合函数

时间:2014-04-15 06:42:40

标签: sql sql-server sql-server-2008 tsql

我需要使用单个SQL查询来计算表中的行数。

该查询不应包含任何聚合函数,如COUNT

9 个答案:

答案 0 :(得分:4)

ROW_NUMBER 排名功能可以在不使用聚合函数的情况下在单个查询中执行此操作:

SELECT TOP 1 Row
FROM (
    SELECT ROW_NUMBER() OVER(ORDER BY SomeColumn) Row
    FROM YourTable) output
ORDER BY Row DESC

答案 1 :(得分:3)

简单方法:

DECLARE @i INT = 0

SELECT @i = @i + 1
FROM <WHAT EVER>

SELECT @i AS RC

快速,有效且无需各种子查询,因为它只需要一次运行数据:)

答案 2 :(得分:2)

我有点惊讶没人提到这个:

EXEC sp_spaceused @objname = N'MyTable', @updateusage = 'TRUE' 

除其他外,这将返回表中当前记录的数量。

这在大多数情况下也适用:

SELECT rows 
FROM sys.partitions 
WHERE index_id IN (1,0) 
    AND object_id = OBJECT_ID(N'MyTable')

答案 3 :(得分:0)

自&#34;单个SQL查询&#34;已被证明是一个宽松的要求,考虑我的想法立即...但被视为不合适(正如我在@ AllenSHansen的评论中所指出的那样):

SELECT 1 FROM YourTable;
SELECT @@ROWCOUNT;

答案 4 :(得分:-1)

试试这个

SELECT MAX(Row) FROM 
(SELECT ROW_NUMBER() OVER(ORDER BY anycolumn DESC) Row FROM tablename) output

但是什么阻止你使用Count()?更喜欢使用count()。

答案 5 :(得分:-1)

over()函数可以解决问题。

select Column1,Column2, count(*) over() as testColumn from tablename

答案 6 :(得分:-2)

计算表中的记录有多种方法:

  1. 让dbms计数。您可以使用聚合函数,例如select count(*) from mytable;
  2. 你算了。即执行select * from mytable;,然后计算显示的记录。
  3. 我会建议使用前一种方法,但您似乎想要使用后一种方法。享受。

答案 7 :(得分:-2)

您可以在这里找到一种方法:

SELECT
   Total_Rows= SUM(st.row_count)
FROM
   sys.dm_db_partition_stats st
WHERE
    object_name(object_id) = 'Mytable' AND (index_id < 2)

here上找到一个很好的讨论。

答案 8 :(得分:-2)

使用ROW_NUMBER(),您将获得表格中的总行数而不使用聚合函数,如下面的两步示例所示。

1)表&amp;数据设置

示例:

Create Table Dted (id int , name Varchar(20))

Insert into dted values (1,'aaa'),(2,'bbb'),(3,'ccc')

Select * from dted

输出:

id   name
1    aaa
2    bbb
3    ccc

2)总行数

示例:

select top 1 ROW_NUMBER() over (order by id) as TotRows from dted order by TotRows desc

输出:

TotRows
3