如何计算记录数以及从查询中获取记录?

时间:2012-07-25 12:17:54

标签: sql-server-2008

我有3个表A,B和C.在存储过程中,我使用查询来获取结果,但我也想要从上面的查询得到的记录总数。 这可能吗。我试过用这样的东西

Select count(*) 
from (
   select A.Name,B.Address,C.grade 
   from A,B,C 
   where A.id=B.id 
   AND B.Tlno=C.tlno
)

但这不起作用。

4 个答案:

答案 0 :(得分:3)

(1)停止使用旧式的x,y,z连接。

SELECT A.Name,B.Address,C.grade 
  FROM dbo.A
  INNER JOIN dbo.B ON A.id = B.id
  INNER JOIN dbo.C ON B.Tlno = C.tlno;

(2)您可以将count(*)over()添加到整个结果集。这有点浪费,因为它会返回每一行的计数:

SELECT A.Name, B.Address, C.grade, row_count = COUNT(*) OVER ()
  FROM dbo.A
  INNER JOIN dbo.B ON A.id = B.id
  INNER JOIN dbo.C ON B.Tlno = C.tlno;

答案 1 :(得分:0)

您可以使用窗口函数:

select A.Name,
       B.Address,
       C.grade,
       count(*) over () as total_count
from A,B,C 
where A.id=B.id 
AND B.Tlno=C.tlno

这将返回每行中的总计数(但它将是所有行的相同数字)。

答案 2 :(得分:0)

替代方案是使用@@ rowcount关键字:

SELECT A.Name, B.Address, C.grade, @@rowcount
FROM dbo.A
INNER JOIN dbo.B ON A.id = B.id
INNER JOIN dbo.C ON B.Tlno = C.tlno;

与窗口函数的结果相同,因此您可以获得每行的总计数。我很好奇两者之间是否存在性能差异...(不幸的是,我当前的客户端没有SHOWPLAN权限)

答案 3 :(得分:0)

使用表变量如下

    declare @num table (accname varchar(200),subnet varchar(200))
    insert into @num(accname,subnet) Select a.accountname,s.subnet from tbl_accounts  a,tbl_accountsubnet s where a.accountid=s.accountid
    select COUNT(*) from @num;