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句