今日も本を読みつつ、自分自身がよく理解できていない部分を調べることに。


「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 句に、ntexttextimage 型を指定することはできない。

 

「使わないでくれ」という関数を詳細にまとめなくても良いだろうが、一応覚え書きということで・・。

今回のCOMPUTE句、COMPUTE BY句に代わる、関数もあるようなので後日紹介したいと思う。