今日も本を読みつつ、自分自身がよく理解できていない部分を調べることに。
「COMPUTE句とCOMPUTE BY句は使わない」
これは自分の読んでいる、SQLServerの書籍に載っていた言葉。
使わないなら、載せなきゃいいのに・・・というのは素人考えだろうか。
ただ、COMPUTE句のことも良く知らなかったし
使わない理由が今ひとつ納得いかなかったので、ヘルプで調べてみることに。
どうやらSQLServer2000では、「COMPUTE句」と「COMPUTE BY句」は
過去との互換性を保つために用意されているらしい。
あと、ANSI 標準ではないから、使うべきではないとの記述も。
(これは書籍にも書いてあった)
(?)ちなみにCOMPUTE句とは。
これは、SELECT文の中で使用する。
COMPUTE句を書く位置は、ORDER BY句の下。
COMPUTE句、またはCOMPUTE BY句を使うと
結果セットが複数に分かれる。
例えば、以下のようなSQL文の場合...。
(Northwindデータベースを使用)
--------------------
Select * FROM [Order Details]
ORDER BY ProductID
COMPUTE SUM(UnitPrice) , SUM(Quantity)
--------------------
2つの結果セットが返される。
1つ目の結果セットには、通常の抽出結果が。
2つ目の結果セットには、UnitPriceおよびQuantityの合計値が表示される。
このように通常の結果と、小計の結果が返ってくるのがCOMPUTE句の特徴だ。
小計を返すことから、COMPUTE句には、以下の集計関数しか利用することができない。
ちなみに使用可能な集計関数は、以下のとおり。
AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM
ちなみに、COMPUTE BY句は・・。
--------------------
Select * FROM [Order Details]
ORDER BY ProductID
COMPUTE SUM(UnitPrice) , SUM(Quantity) BY ProductID
--------------------
小計列を指定した後で、「BY 列名」の形で指定を行う。
COMPUTE BY句を使うと、「BY 列名」で指定した
列名のグループごと結果セットが分かれる形になる。
上記の例で言うと、以下のような形で結果セットがわかれる。
1つ目の結果セット:ProductIDが「1」のデータ抽出結果
2つ目の結果セット:ProductIDが「1」の小計(この場合、UnitPriceとQuantity)を表示。
3つ目の結果セット:ProductIDが「2」のデータ抽出結果
4つ目の結果セット:ProductIDが「2」の小計
以下、同じようにProductIDごとグループ化された形で出力される。
※ちなみに、COMPUTE またはCOMPUTE BY 句に、ntext、text、image 型を指定することはできない。
「使わないでくれ」という関数を詳細にまとめなくても良いだろうが、一応覚え書きということで・・。
今回のCOMPUTE句、COMPUTE BY句に代わる、関数もあるようなので後日紹介したいと思う。