• 締切済み

SELECTした結果に通番を振りたい

PostgreSQL8.2で、 select * from XX order by 項目名で データ検索した結果に、1~nの通番を 振りたいのですが、ポスグレで実現する 方法はあるでしょか。

みんなの回答

回答No.2

#1回答者です。 #1で提示したSQLが、「グループ内通番」のSQLになっていたので訂正します。 【SQL例】列c1でユニークになる場合 select (select count(*) from t1 where x.c1>=c1) as rn, c1,c2 from t1 as x order by rn

回答No.1

PostgreSQLには、OracleやSQL Server 2005にあるような、row_number()といった関数がないので、SQLだけでやるには「自己結合して通番付け」するといった細工が必要です。 (1)アプリケーションの言語側でやった方が、SQLでやるより軽いし簡単です。それでもなお、SQLでやりたいですか? (2)表に主キー(行データを一意に識別できる1個以上の列)はありますよね? 【SQL例】列c1、c2で一意に識別できる場合 select count(*) as rn,x.c1,x.c2 from t1 as x,t1 as y where x.c1=y.c1 and x.c2>=y.c2 group by x.c1,x.c2 主キー以外のすべての列を表示したい場合は、上記クエリから、さらに全列表示のクエリを作る必要があります。

BlueSnow7
質問者

お礼

PostgreSQLで実現できない事が分かりました。 PHPとPostgreSQLを連携しているので、 PostgreSQLだけで実現しないで、PHPのループカウンタで 対応します。 ご回答ありがとうございます。

関連するQ&A