我需要获取查询的行数,并在一个查询中获取查询的列。计数应该是结果列的一部分(对于所有行,它应该是相同的,因为它是总数)。
例如,如果我这样做:
select count(1) from table
我可以有总行数。
如果我这样做:
select a,b,c from table
我将获得查询的列值。
我需要的是以一种非常有效的方式在一个查询中获取计数和列值。
例如:
select Count(1), a,b,c from table
没有小组,因为我想要总数。
我找到的唯一方法是执行临时表(使用变量),插入查询的结果,然后计数,然后返回两者的连接。但如果结果得到数千条记录,那就不会非常有效。
有什么想法吗?
答案 0 :(得分:9)
@Jim H几乎是正确的,但选择了错误的排名功能:
create table #T (ID int)
insert into #T (ID)
select 1 union all
select 2 union all
select 3
select ID,COUNT(*) OVER (PARTITION BY 1) as RowCnt from #T
drop table #T
结果:
ID RowCnt
1 3
2 3
3 3
通过常量进行分区使其计入整个结果集。
答案 1 :(得分:5)
使用CROSS JOIN:
SELECT a.*, b.numRows
FROM YOUR_TABLE a
CROSS JOIN (SELECT COUNT(*) AS numRows
FROM YOUR_TABLE) b
答案 2 :(得分:1)
查看SQL Server的Ranking函数。
SELECT ROW_NUMBER() OVER (ORDER BY a) AS 'RowNumber', a, b, c
FROM table;
答案 3 :(得分:0)
你可以这样做:
SELECT x.total, a, b, c
FROM
table
JOIN (SELECT total = COUNT(*) FROM table) AS x ON 1=1
将返回第一列中的记录总数,后跟字段a,b和amp; ç