質問 |
||
| 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のループカウンタで 対応します。 ご回答ありがとうございます。 |