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;

ただし、ウィンドウ関数と同じ結果になるため、各行の合計数が得られます。2つにパフォーマンスの違いがあるかどうか興味があります...(残念ながら、現在のクライアントにはSHOWPLAN権限がありません)

于 2012-07-25T12:26:50.263 に答える