- 締切済み
検索対象のデータが「複数レコード」を「1レコード」として獲得するSQL
教えて下さい。 SQLの理解が乏しく、難航しています。 検索対象のデータが複数レコード存在するのですが、 それぞれのレコードの特定の項目を区切り文字で区切 ったデータとして1レコードとして獲得するSQLがあ ればと思いました。 イメージ) テーブルA ID shapeID name 1 1 交通安全 1 2 防火管理 2 1 什器 3 1 セキュリティー 区切り文字","とし、IDを1で検索した表示結果 交通安全,防火管理 教えてgooで調べてみると、「縦方向のデータを横方向 にするのは、SQLは苦手」とありました。 やはり無理なのでしょうか? 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
>「縦方向のデータを横方向にするのは、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以降の機能です)
- chukenkenkou
- ベストアンサー率43% (833/1926)
ID + shapeIDでユニークになるのですか? プログラムを組んで、変数で受け取り、加工した方が 簡単だと思いますが?
お礼
有難うございます。 >ID + shapeIDでユニークになるのですか? 確かにユニークになるのですが、データとして 1レコードで獲得したかったので… プログラムでの対応を検討してみます。
お礼
有難うございます。 >カラム数が固定になるので… 固定なら可能ですよね~ でも、今後このような場合は参考になるのでありがたいです。 >9i以降の機能です 対象のDBが8iでしたので、カラム数が固定でもNGでした。 色々有難うございました。