0

我有 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

4 回答 4

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;
于 2012-07-25T12:20:50.987 回答
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

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

于 2012-07-25T12:20:43.430 回答
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;
于 2012-07-25T12:35:14.520 回答
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 权限)

于 2012-07-25T12:26:50.263 回答