- 締切済み
SELECTした結果に通番を振りたい
PostgreSQL8.2で、 select * from XX order by 項目名で データ検索した結果に、1~nの通番を 振りたいのですが、ポスグレで実現する 方法はあるでしょか。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- chukenkenkou
- ベストアンサー率43% (833/1926)
回答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
- chukenkenkou
- ベストアンサー率43% (833/1926)
回答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 主キー以外のすべての列を表示したい場合は、上記クエリから、さらに全列表示のクエリを作る必要があります。
お礼
PostgreSQLで実現できない事が分かりました。 PHPとPostgreSQLを連携しているので、 PostgreSQLだけで実現しないで、PHPのループカウンタで 対応します。 ご回答ありがとうございます。