我需要使用单个SQL查询来计算表中的行数。
该查询不应包含任何聚合函数,如COUNT
。
答案 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)
计算表中的记录有多种方法:
select count(*) from mytable;
select * from mytable;
,然后计算显示的记录。我会建议使用前一种方法,但您似乎想要使用后一种方法。享受。
答案 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()
,您将获得表格中的总行数而不使用聚合函数,如下面的两步示例所示。
示例:
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
示例:
select top 1 ROW_NUMBER() over (order by id) as TotRows from dted order by TotRows desc
输出:
TotRows
3