がんふぃーるど室長の不定期ブログ

ただいま助手と悪戦苦闘中!

目次

Blog 利用状況

ニュース


自己紹介

名前:がんふぃーるど
肩書:室長
種別:人間・男
資格一覧:
MCP 70-215 Installing, Configurating, and Administering Microsoft Windows 2000 Server
MCTS .NET Framework 2.0 - Distributed Applications
MCTS .NET Framework 2.0 - Web Applications

犬紹介


名前:なうら
肩書:助手
種別:犬・狆・メス
誕生日:2006/7/9
特技:鼻水飛ばし、甘噛、奇襲・急襲・強襲、そそう、お手、お座り、待て

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

ウィンドウ関数(分析関数) - SQL Server 2005

WNDPROCとかじゃアr (ry

ウィンドウ関数はSQL Serverでも使用できます。なんてったって標準SQLですから。

ウィンドウ関数を使ってみる

SQL Server 2005のAdventureWorksを使用して、ウィンドウ関数を使ってみます。やりたいことはOracle版と同じようなことですが、部署IDみたいなものが無かったので性別でウィンドウを区切ってみます。

  • Employeeテーブルの中で、性別ごとに生年月日順にランク付けする。
  • ランク付けしたら、同じ性別の中で何人中何位だったかわかるようにする。
  • 取得する項目はEmployeeID, 性別, 順位, 性別ごとの人数

SELECT
a.EmployeeID as 社員ID,
a.Gender as 性別,
Rank() OVER (PARTITION BY a.Gender ORDER BY a.BirthDate) as 順位,
Count(a.Gender) OVER (PARTITION BY a.Gender) as 人数
FROM
HumanResources.Employee a

Oracleと同じですね。実行計画は次の通り

|--Nested Loops(Inner Join)
     |--Table Spool
     |    |--Segment
     |         |--Sequence Project(DEFINE:([Expr1002]=rank))
     |              |--Segment
     |                   |--Segment
     |                        |--Sort(ORDER BY:([a].[Gender] ASC, [a].[BirthDate] ASC))
     |                             |--Clustered Index Scan(OBJECT:([AdventureWorks].[HumanResources].[Employee].[PK_...] AS [a]))
     |--Nested Loops(Inner Join, WHERE:((1)))
          |--Compute Scalar(DEFINE:([Expr1003]=CONVERT_IMPLICIT(int,[Expr1007],0)))
          |    |--Stream Aggregate(DEFINE:([Expr1007]=Count(*)))
          |         |--Table Spool
          |--Table Spool

参考文献

SQL Server 2005 Books Online - OVER句

投稿日時 : 2008年7月31日 0:57

コメントを追加

No comments posted yet.
タイトル  
名前  
URL
コメント