• 締切済み

1つのカラムに複数レコードの値を・・・

お世話になります。 SQL文の作成に難航しています。 どうか知恵を貸してください。 環境:VS2005 Oracl10g 言語:VB.Net A_TABAL NO |GroupNO| 1 |A_1 1 |A_1 1 |A_1 B_TABAL NO |K_NO|K_N 1 |K_1 |項目名1_あ 1 |K_1 |項目名1_い 1 |K_2 |項目名2_あ 1 |K_1 |項目名1_う 1 |K_2 |項目名2_あ 1 |K_2 |項目名2_あ AテーブルとBテーブルのNOが一致するもので、K_NOがK_1であれば、 項目名1というカラムにいれる。 (複数の場合はカンマ区切りでいれる) K_NOがK_2であれば、項目名2というカラムにいれる。 (Bテーブルでは K_1とK_2のレコード数は同じ、実際とってくるときは、NOが同じであれば、重複なものは消すと) 求めたい結果 NO |GroupNO  |項目名1               |項目名2 1  |A_1     |項目名1_あ,項目名1_い,項目名1_う|項目名2_あ

みんなの回答

回答No.1

テストしてないけど、こんな感じかな select z.NO,z.GroupNO,x.項目名1,y.項目名2 from ( select NO,sys_connect_by_path(K_N,',') 項目名1 from ( select b.*,row_number() over(partition by NO,K_NO order by K_N) R from (select distinct * from B_TABAL where K_NO='K_1') b ) start with R=1 connect by prior R = R -1 and prior NO=NO ) x, ( select NO,sys_connect_by_path(K_N,',') 項目名2 from ( select b.*,row_number() over(partition by NO,K_NO order by K_N) R from (select distinct * from B_TABAL where K_NO='K_2') b ) start with R=1 connect by prior R = R -1 and prior NO=NO ) y, ( select distinct * from A_TABAL ) z where z.NO=x.NO and z.NO=y.NO ;

sinomori
質問者

お礼

返事遅くなってすみません。 これが階層問い合わせというんですか。 ネットで調べてたんですが、関数の使い方がまたっくわからなくて、どうしもなく、ここで質問しました^^; 回答を解析しならが、勉強します。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • あるカラムに同じ値を持つレコードの2件目以降を削除

    あるカラムに同じ値を持つレコードの2件目以降を削除するSQLを教えて下さい。 例) テーブル名:T キーカラム名:K 同じ値を持つかチェックするカラム名:S SELECT K,S FROM T; K S ---- 1 a 2 b 3 b 4 c 5 d 6 e 7 e 上記の場合、K=2または3と、K=6または7の2レコードを削除したい。

  • SQLで複数列のデータを複数行にしたい

    以下のようなテーブルがあるとします。 column1 a,b,c <- カンマの数は最大50 b,d c,x SQLを実行し以下のような結果を返したいです。 以下の3つのことをすればできそうなのですが複数列を複数行にする方法がわかりません。 1.strtokenで50カラムに分割(カンマ分割) 2. 50カラムを1カラムにする 3.DISTINCTで重複データの削除 結果 a b c d x カンマの数が50あるので、かなり長いSQLになるのですが SELECT文50個をUNIONしてやればできるかなとも考えているのですが 何か良い方法はないでしょうか。 よろしくお願いします。

  • select文の書き方

    助けてください……(T-T) oracleをつかっていますが、SQLが苦手すぎて、どうしたらいいか分かりません。。。 解決策をご存じの方、教えていただけないで しょうか? テーブルは下記の2つがあります。 (1)Aテーブルの1カラムに、複数の商品IDを格 納している(カンマ区切り) (2)Bテーブルには、商品ID&商品名の一覧が ある このAテーブルの商品ID列に番号から、Bテー ブルの商品名を取得したいです。 ■Aテーブル no | 商品ID 1001 | 1、2 1002 | 1、2、3 1003 | 3 ■Bテーブル 商品ID | 商品名 1 | 商品A 2 | 商品B 3 | 商品C ■とりたいデータの形 1001 | 商品A、商品B 1002 | 商品A、商品B、商品C 1003 | 商品C カンマ区切りで格納しているとin句は使えな いと知りました。。 テーブルにカンマ区切りで格納することは、 変えることはできませんし、 SQLで1回で取得しなきゃいけないのです。 そんなこと、可能なのでしょうか。。 明日の朝までに教えていただければ、 すごくすごく助かります。。 すみませんが、宜しくお願いします。

  • NULLだったら、aカラムの値をbカラムへコピー

    ■前提 ・MySQLの同じテーブル内に、datetime型の「aカラム」「bカラム」がある ■質問 ・この時、bカラムがNULLだったら、aカラムの値をbカラムへコピーするSQL文を教えてください

    • ベストアンサー
    • MySQL
  • レコードのコピー

    既存のレコードを1項目だけ変更して同一テーブルに登録します。 こちらで以前質問されていた内容を参考に以下のSQLを作ってみましたが、「SQLコマンドが正しく終了されていません」といわれてしまいます。 どうすればうまくいくのかわかりません。 教えてください。よろしくお願いします。 (ちなみに以下のSQLでの「NO」は変更項目です) INSERT INTO table (column1, column2, column3, KOUSIN_DATE) SELECT A.column1, A.column2, NO, TO_DATE(2005/12/01,'YYYY/MM/DD HH24:MI:SS') FROM table AS A WHERE A.column1 = '9999';

  • 複数行を1レコードにまとめたい

    1つのテーブルでカラムAに個人を特定する情報、カラムBに個人情報の項目、カラムCにその値が設定されています。 カラムBは個人によって登録されている数が異なります。 カラムBから必要な項目を特定して個人を1レコードに集約して抽出したいと思っているのですが、どのようにSQLを作成すればよいでしょうか? 作成してみたSQLでは1レコードに1カラムずつしか値が入らないため、複数行となってしまうのでまとめたいという状況です。 データ カラムA, カラムB, カラムC ------------------------- KOJIN1, AAA, MOJI1 KOJIN1, BBB, MOJI2 KOJIN2, AAA, MOJI3 KOJIN3, BBB, MOJI4 KOJIN3, CCC, MOJI5 select カラムA, case when カラムB = AAA then カラムC end カラムAAA, case when カラムB = BBB then カラムC end カラムBBB from テーブル 結果 カラムA, カラムAAA, カラムBBB ----------------------------- KOJIN1, MOJI1, KOJIN1, , MOJI2 KOJIN2, MOJI3, KOJIN3, , MOJI4 ↑KOJIN1, MOJI1, MOJI2 のように出力したい 初歩的な質問かもしれませんが、よろしくお願いします。

  • コラム名でテーブルを検索できますか?

    SQL & ORACLE初心者です。最近、セレクト文を使って、テーブル内のデータを取り出すことができるようになりましたが、逆にコラム名からテーブルを検索することはできるでしょうか。 例えば、TABLE_A内のコラムの中にCOLUMN_Aという名前のコラムがあるとして、このコラムが他のテーブルでも使われているかどうか、いるとしたらどのテーブルかを知りたいのです。また、COLUMN_Aと別のCOLUMN_B(それぞれが単独で記載されているテーブル名はわかっているとします)が一緒にある一つのテーブルで使われているかどうか、またそのテーブル名を知りたいときには、どのようなSQLを書けばよいでしょうか。 DBAやその他DBを構築するための知識をお持ちの方、ご回答をお待ちしています。

  • テーブル名をカラムとして取得する方法

    テーブル名をカラムとして取得する方法はありますでしょうか? オラクル8とVB6でプログラムを組んでいます。 例 TABLE Aの内容 カラム1 1 2 3 TABLE B カラム1の内容 4 5 6 SQLは簡略化してかきます。下記のSQLを実行した場合、 select A.カラム1 from A union select b.カラム1 from b 1 2 3 4 5 6 を取得できます。 例えば、上記で、SQL実行後、 下記のような値を取得したいです。 1 ,Aのテーブルだよ 2 ,Aのテーブルだよ 3 ,Aのテーブルだよ 4 ,Bのテーブルだよ 5 ,Bのテーブルだよ 6 ,Bのテーブルだよ それぞれのテーブルの名前を別名で結果に格納したいのです。 何か方法はありますでしょうか? なければ、unionせずに、2回SQLを発行し、それぞれに、 プログラム上で、「Aのテーブルだよ」を後で挿入したいと思っています。

  • SQL カラムの値ごとの集計

    例えばテーブル名test01にカラムhogeとstatがあるとします。 statにはaまたはbの値が入ってます。 XXXX a XXXX b XXXX a XXXX a YYYY a YYYY b test01のテーブルが上記の様な場合、以下の様に集計したいです。 hoge a b (ヘッダ) XXXX 3 1 YYYY 1 1 どのようにSQLを書いたら良いか教えて下さい。 以上、よろしくご指導の程お願い申し上げます。

  • 複数のレコードの値を取り出すには

    初心者です。あるカラムから複数のレコードの値を取り出すにはどのように書けばよいかどなたか教えていただけますでしょうか。 下記のコードではcalendartblというテーブルから1レコードのみ取り出せます。 テーブル:calendartbl holiday(カラム名) 2016/9/12(レコード1行目) 2016/9/14(レコード2行目) 2016/9/20(レコード3行目) 2016/9/26(レコード4行目) 2016/9/28(レコード5行目) コード: $sql = "SELECT calendartbl.holiday FROM calendartbl"; $ret = f_db_select($sql); foreach ($ret as $h){ $holiday = $h['holiday']; } 結果=2016/9/12 では複数のレコード、つまり「2016/9/12、2016/9/14、2016/9/20、2016/9/26、2016/9/28」を取り出して、上記の$holidayに代入させるにはどのように書けばよいでしょうか。 どなたか教えて頂けたら幸いです。 よろしくお願い致します。

    • 締切済み
    • PHP
このQ&Aのポイント
  • 古いPCで使っていたプリンターが、新しいPCではドライバーのインストールができない状況に困っています。
  • CD-ROMを持っているが、インストールできないし、オンラインでもインストールできません。
  • プリンターが使用できず、大変困っています。
回答を見る