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

그러나 이것은 작동하지 않습니다.

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 

이 비록 행 각자의 총 개수를 반환합니다 (그러나 모든 행에 대해 동일한 수있을 것입니다) :

+1

다음과 같이 테이블 변수를 사용 (불행하게도 나의 현재의 클라이언트에서 실행 계획 권한이 없습니다) ...이 있다면 나는 궁금 SP에 당신 간단히 OUTPUT or RETURN @@ rowcount 일 수도 있습니다. –

답변

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) 전체 결과 집합에 개수 (*)를 더할 수 있습니다.

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

대안이 @@ 행 개수 키워드를 사용하는 것입니다 : 비록 윈도우 기능과

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; 

같은 결과를 당신이 얻을 수 있도록, 그것은 모든 행의 수를 반환하기 때문에이 종류의 낭비 각 행의 합계 수. 둘 사이의 성능 차이가

+0

각 행에 "1"이 주어지면 쿼리가 완료 될 때 소급하여 자체 업데이트해야합니다. –

+0

로컬 데이터베이스에서 테스트했습니다. 나는 쿼리가 완료된 후에 값을 채우기 만한다고 가정합니다. 어쨌든 영향을받은 총 행 수를 찾기 위해 수행해야합니다. – pleinolijf

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

큰 결과에는 현명하지 않을 수 있습니다. –

관련 문제