2006.03.31

区分の先頭行は?

SQLでデータを取得する場合に、
「▲▲の区分の先頭では明細の項目を変えたい」
という場面ってありませんか?
簡単に出来そうだけど・・・さて、どうしよう。
SQLで?アプリケーションで?「よし、PL/SQLでやってしまおう。」

そんな時は順位等を付ける場合に使用する ROW_NUMBER を使用します。
そして PARTITION BY で区切ります。
使用例としては以下のよになります。

ROW_NUMBER() OVER (PARTITION BY ▲▲ ORDER BY ●●)
 ※ ▲▲・●●は項目

上記では、●●で並び替え1から順に連番を振、
▲▲が変わったタイミングでまた1から連番を振ります。

これで、どの明細が区分の何番目の明細かが判別できます。
ということはこれが1の場合は先頭ということになります。
あとは判別式で判別してやればよいわけですが・・・しかーし、
8i以降で一応使用は可能とのことですが、
バージョンによってはSQLは発行出来てもPL/SQLではコンパイルが通らず
使用できない場合がありますのでご注意を・・・。
(結局そのときの8iでの対応は、サブクエリで並び替えを行い、
グローバル変数を使用した”変数の値が変わったら”というFUNCTIONで代用を作成し判別しました。)

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
nitta