都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

便利な SQL の関数とか、構文とか、その他色々まとめてみる - その1 ( OFFSET n ROWS - FETCH NEXT n ROWS ONLY ) -

 自分が便利だなと思う関数とか SQL に関係するものをまとめていこうかと思います。SQL Server 2012 で追加されたものもありますので、その辺りも含めてまとめてみます。( 実際の動作は、SQL Server 2014 CTP2 で、対象となるテーブルは、AdventureWorks の Sales.SalesOrderDetail を使用しています。 )

 今回は、OFFSET n ROWS - FETCH NEXT n ROWS ONLY です。この機能は、2012 から搭載されたものです。n 行目から、n 件取得するということが簡単に実現できます。

SELECT [SalesOrderID]
      ,[SalesOrderDetailID]
      ,[CarrierTrackingNumber]
      ,[OrderQty]
      ,[ProductID]
      ,[SpecialOfferID]
      ,[UnitPrice]
      ,[UnitPriceDiscount]
      ,[LineTotal]
      ,[rowguid]
      ,[ModifiedDate]
  FROM [AdventureWorks2012].[Sales].[SalesOrderDetail]
  ORDER BY [ModifiedDate]
  OFFSET 1000 ROWS
  FETCH NEXT 100 ROWS ONLY

f:id:koogucc11:20140328000814p:plain

 2012 以前のバージョンでは、下記のようになります。ROW_NUMBER() を使って、BETWEEN したり...色々大変です。

SELECT [SalesOrderID]
      ,[SalesOrderDetailID]
      ,[CarrierTrackingNumber]
      ,[OrderQty]
      ,[ProductID]
      ,[SpecialOfferID]
      ,[UnitPrice]
      ,[UnitPriceDiscount]
      ,[LineTotal]
      ,[rowguid]
      ,[ModifiedDate]
  FROM ( SELECT
       ROW_NUMBER() OVER(ORDER BY [ModifiedDate]) AS ROWNUMBER
      ,[SalesOrderID]
      ,[SalesOrderDetailID]
      ,[CarrierTrackingNumber]
      ,[OrderQty]
      ,[ProductID]
      ,[SpecialOfferID]
      ,[UnitPrice]
      ,[UnitPriceDiscount]
      ,[LineTotal]
      ,[rowguid]
      ,[ModifiedDate]
   FROM [AdventureWorks2012].[Sales].[SalesOrderDetail] ) AS TB
WHERE
  TB.ROWNUMBER BETWEEN 1001 AND 1100

f:id:koogucc11:20140328000832p:plain

 クエリが結構複雑になってしまいますね。2012 以上な人たちはアプリケーションでページングな UI が必要になった場合は、OFFSET n ROWS - FETCH NEXT n ROWS ONLY を使いましょう。

※いいなぁ。早く 2014 本出版されないですかね。

Professional Microsoft SQL Server 2014 Administration

Professional Microsoft SQL Server 2014 Administration

  • 作者: Adam Jorgensen,Bradley Ball,Steven Wort,Ross LoForte,Brian Knight
  • 出版社/メーカー: Wrox
  • 発売日: 2014/06/23
  • メディア: ペーパーバック
  • この商品を含むブログを見る