今宵も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商店」のデータが抽出される。


しかし、今まで使っていなかった機能だけに、実務でどのような使い道があるか全く思い浮かばない・・。

ゆくゆくは、有効な使い道というのも指南できれば良いと思うが、少なくとも数年はかかりそうな・・。