ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.2846857 SELECTした結果に通番を振りたい
質問者:BlueSnow7 PostgreSQL8.2で、
select * from XX order by 項目名で
データ検索した結果に、1〜nの通番を
振りたいのですが、ポスグレで実現する
方法はあるでしょか。
困り度:
  • すぐに回答を!
質問投稿日時:
07/03/19 15:44
この質問に対する回答は締め切られました。
最新から表示回答順に表示

回答

ANo.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
種類:アドバイス
どんな人:専門家
自信:参考意見
回答日時:
07/03/20 22:56
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.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

主キー以外のすべての列を表示したい場合は、上記クエリから、さらに全列表示のクエリを作る必要があります。
回答者:chukenkenkou
種類:アドバイス
どんな人:専門家
自信:参考意見
回答日時:
07/03/20 20:01
この回答へのお礼PostgreSQLで実現できない事が分かりました。

PHPとPostgreSQLを連携しているので、
PostgreSQLだけで実現しないで、PHPのループカウンタで
対応します。
ご回答ありがとうございます。
 
最新から表示回答順に表示