2012-07-25 78 views
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 
) 

但是,這是行不通的。

+1

作爲它的SP你可以簡單地輸出或返回@@ rowcount – 2012-07-25 12:23:45

回答

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 

這將在每一個行返回的總數雖然(但它會爲所有行數相同)。

3

(1)停止使用舊式x,y,z連接。 (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; 
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權限不幸)

+0

我認爲這將給每行「1」,否則它將不得不追溯更新自己當查詢完成 – 2012-07-25 12:43:18

+0

它不,我測試了它在本地數據庫。我想它只是在查詢完成後才填充值,就像它應該做反正找到受影響的行的總數一樣...... – pleinolijf 2012-07-25 12:47:38

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; 
+1

這對於大的結果可能不明智。 – 2012-07-25 12:55:34