dポイントプレゼントキャンペーン実施中!

教えて下さい。
SQLの理解が乏しく、難航しています。

検索対象のデータが複数レコード存在するのですが、
それぞれのレコードの特定の項目を区切り文字で区切
ったデータとして1レコードとして獲得するSQLがあ
ればと思いました。

イメージ)
テーブルA
ID shapeID name
1 1 交通安全
1 2 防火管理
2 1 什器
3 1 セキュリティー

区切り文字","とし、IDを1で検索した表示結果
交通安全,防火管理

教えてgooで調べてみると、「縦方向のデータを横方向
にするのは、SQLは苦手」とありました。
やはり無理なのでしょうか?

宜しくお願いします。

A 回答 (2件)

>「縦方向のデータを横方向にするのは、SQLは苦手」とありました。


>やはり無理なのでしょうか?

横展開自体は不可能ではありません。(条件が付くけど)

select
ID,
max(decode(shapeID,1,name)) name1,
max(decode(shapeID,2,name)) name2,
max(decode(shapeID,3,name)) name3
from A
group by ID

とか

select
ID,
max(decode(R,1,name)) name1,
max(decode(R,2,name)) name2,
max(decode(R,3,name)) name3
from
(select A.*,row_number() over(partition by ID order by shapeID) R from A)
group by ID

で、横への展開は可能ですが・・
カラム数が固定になるので、予め最大数が判ってないと対応できません。

カンマで1カラムに統合するには、そのような集計関数を作るか、
再帰検索でこねくると出来ないことはありません。
そのような用件が多いのであれば、集計関数を自作すると良いと思います。
(集計関数の自作は、9i以降の機能です)
    • good
    • 1
この回答へのお礼

有難うございます。

>カラム数が固定になるので…
固定なら可能ですよね~
でも、今後このような場合は参考になるのでありがたいです。

>9i以降の機能です
対象のDBが8iでしたので、カラム数が固定でもNGでした。

色々有難うございました。

お礼日時:2005/12/13 11:56

ID + shapeIDでユニークになるのですか?



プログラムを組んで、変数で受け取り、加工した方が
簡単だと思いますが?
    • good
    • 0
この回答へのお礼

有難うございます。
>ID + shapeIDでユニークになるのですか?
確かにユニークになるのですが、データとして
1レコードで獲得したかったので…

プログラムでの対応を検討してみます。

お礼日時:2005/12/09 18:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す