私は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
)
しかし、これは機能していません。
私は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)古いスタイルの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;
ウィンドウ関数を使用できます。
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
ただし、これにより、すべての行の合計数が返されます(ただし、すべての行で同じ数になります)。
以下のようにテーブル変数を使用します
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;
@@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;
ただし、ウィンドウ関数と同じ結果になるため、各行の合計数が得られます。2つにパフォーマンスの違いがあるかどうか興味があります...(残念ながら、現在のクライアントにはSHOWPLAN権限がありません)