我有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
)
但这不起作用。
答案 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;