今宵もTransact-SQLについて。
「WITH TIES句」とは?
勉強中に気になったので調べてみることにした。
どうやらSELECT文の中で使うらしい!
(全然気づかなかった!! マイナーな機能だと思う..)
●WITH TIES句とは
・ORDER BY のキー列の値が TOP n (PERCENT) の最終行と同じ値を持つ行を
基の結果セットから追加行として返す。
※ORDER BY句を使用している時のみ、指定可能。
という機能のようだ。(T-SQLのヘルプより抜粋)
読んだだけだと、よくわからない・・・(;_;
試してみることにした。
●テーブル名:Orders(キーは受注番号)
| 受注番号 | 得意先コード | 得意先名 |
| 0001 | 10 | A商店 |
| 0002 | 15 | B商店 |
| 0003 | 20 | C商店 |
| 0004 | 10 | A商店 |
| 0005 | 25 | D商店 |
| 0006 | 10 | A商店 |
上記のようなデータが入っているテーブルを参考に考えてみたい。
↓まずは、WITH TIES句を使わないSELECT文
--------------
SELECT TOP 1 * FROM Orders
ORDER BY 得意先コード
--------------
[TOP 1]を指定しているので、一番得意先コードの若い「A商店」の
受注番号:0001のデータのみ表示される。
↓WITH TIES句を使うと...
--------------
SELECT TOP 1 WITH TIES *
FROM Orders
ORDER BY 得意先コード
--------------
| 受注番号 | 得意先コード | 得意先名 |
| 0001 | 10 | A商店 |
| 0004 | 10 | A商店 |
| 0006 | 10 | A商店 |
[TOP 1]を指定しているが、A商店のデータが全て抽出されるのだ。
ORDER BY句で指定した列で、グループ化をしているようなイメージだろうか。
ちなみに、この例で言うと、[TOP 2]や[TOP 3]を指定した場合も結果は同じとなる。
[TOP 4]を指定すると、「A商店の3件」+「B商店」のデータが抽出される。
しかし、今まで使っていなかった機能だけに、実務でどのような使い道があるか全く思い浮かばない・・。
ゆくゆくは、有効な使い道というのも指南できれば良いと思うが、少なくとも数年はかかりそうな・・。