人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SQLの質問です。

テーブルXが以下のようになっており、

IDa IDb
----------------
1 b1
1 b2
1 b3
2 b4
2 b5
3 b6

次のような結果を得たいと考えています。
SELECT文1本で書ける方法はありますでしょうか?

1 b1 b2 b3
2 b4 b5
3 b6

PostgreSQLを使用しています。

●質問者: katsube
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:b2 B4 b6 IDA IDB
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● tamo2_xvi
●1ポイント

select IDa,IDb from テーブルx where IDb like 'b%';

では如何でしょうか?

◎質問者からの返答

それだと、結果が

1 b1

1 b2

1 b3

2 b4

2 b5

3 b6

にならないでしょうか?

ちなみに、列数が合わない空欄部分はNullが出力されればOKです。


2 ● tamo2_xvi
●1ポイント

sqlではここまでにして、後はphpなどで加工した方が

早いような気がします。

頻繁に使うようであれば、引き出したいデータ形式にした

テーブルを作成しリレーションされては如何でしょうか?

◎質問者からの返答

早いかどうかは問題でなく、今回の質問の主題は、これらをSQLで出来ないか、ということです。

もともと、サマリー用のテーブルを用意する、プログラムで加工するなどの手法を考えていました。

ピントのずれた回答はご勘弁ください。


3 ● 浅倉卓司
●60ポイント ベストアンサー

select ida, array(select idb from x as x2 where x.ida=x2.ida) from x;

では駄目でしょうか?

◎質問者からの返答

あ、なるほど。

配列と自己結合使えばいいんですね!これは思いつきませんでした。

先ほど試してみたら、

1 b1 b2 b3

1 b1 b2 b3

1 b1 b2 b3

2 b4 b5

2 b4 b5

3 b6

って感じになってしまったので、とりあえずdistinctつけて解決しました。

#あ、distinctじゃなくて結合うまいこと

#調整すればいきそうな気もしますが、

#どなたかお分かりになられたら

#ついでに教えてください(^^;


4 ● 浅倉卓司
●28ポイント

DISTINCTを全く使わないのは無理でしょう。

SELECTのところでDISTINCTを使いたくないのであれば、

SELECT ida, array(略) FROM (SELECT DISTINCT ida FROM x) AS x;

という手もあります。

◎質問者からの返答

なるほど、ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ