SQLで同テーブルの文字列連結についての質問
- SQLで同テーブルの文字列連結を実現したいです。親テーブルと子テーブルの関係は1対1であり、子テーブルのカラムBを親テーブルのカラムAに連結して出力したいです。
- 親テーブルと子テーブルがあり、親テーブルのカラムAと子テーブルのカラムBを連結して出力するSQLを教えてください。
- Oracle10Gを使用しており、親テーブルと子テーブルがあります。親テーブルのカラムAと子テーブルのカラムBを連結した結果を出力するSQLを教えてください。
- ベストアンサー
SQL 同テーブル、同フィールドの文字列連結
以下の様にSQLで実現したいと思っております。 なお、DBはOracle10Gを利用しております。 親と子テーブルがあり以下の構成となっております。 ■親テーブル ID,カラムA 1 ,AA 2 ,BB 3 ,CC ■子テーブル ID,枝番,カラムB 1 ,1 ,あああ 1 ,2 ,いいい 2 ,1 ,ううう 2 ,2 ,えええ 2 ,3 ,おおお 3 ,2 ,かかか ※IDカラムは親テーブルと子テーブルは1:1です 子テーブルの枝番カラムはIDに対してN件です。 やりたい事としては、上記の2テーブルより、以下の結果を出力したいです。 ID,カラムA,カラムB 1 ,AA ,あああ いいい 2 ,BB ,ううう えええ おおお 3 ,CC ,かかか 親テーブルを元にして、 親テーブルに紐づく子テーブルのカラムBを連結して出力 するSQLをご教授いただけますでしょうか
- take_PP
- お礼率65% (15/23)
- その他(データベース)
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
model句の出番ですな。 SELECT 親テーブル.ID, 親テーブル.カラムA, ConcatT.カラムB FROM 親テーブル LEFT OUTER JOIN ( SELECT ID, SUBSTR(ConcatカラムB, 2) AS カラムB FROM 子テーブル MODEL RETURN UPDATED ROWS PARTITION BY(ID) DIMENSION BY(Row_Number() OVER(PARTITION BY ID ORDER BY 枝番)) MEASURES(カラムB, CAST(NULL AS VARCHAR2(2)) AS ConcatカラムB) RULES ITERATE(100) UNTIL (PRESENTV(カラムB[ITERATION_NUMBER + 2], 1, 0) = 0) (ConcatカラムB[0] = ConcatカラムB[0] || ' ' || カラムB[ITERATION_NUMBER + 1]) ) ConcatT ON 親テーブル.ID=ConcatT.ID ORDER BY 親テーブル.ID; 枝番100件までの想定だけど、事前に件数数えて動的にループ数変えてもいいかも。
その他の回答 (1)
- Chronos198
- ベストアンサー率30% (105/349)
知っている限り、不可能です。 Nが有限であれば以下のような方法もとれなくはないですが・・・。 Select ID, カラムA, ( Select カラムB From 子 Where 子.ID=親.ID And 枝番=1 )||( Select カラムB From 子 Where 子.ID=親.ID And 枝番=2 )||( Select カラムB From 子 Where 子.ID=親.ID And 枝番=3 )||…||( Select カラムB From 子 Where 子.ID=親.ID And 枝番=N ) From 親;
お礼
早速のご回答ありがとうございます。 やはり1つのSQLでは無理なのでしょうか、、 Nは最大値も決まっておらず無限の設計になっています、、 でもご回答頂きました内容も考慮しもう少し悩んでみます ありがとうございます。
関連するQ&A
- access2010 同一idを列に追加
access2010についてselectの方法を教えてください。 ↓元テーブル id | name 1 | a 1 | b 2 | aa 2 | bb 2 | cc 取得したい内容 id| name1| name2| | name3 1| a | b| 2| aa | bb | cc アクセスとエクセルのマクロを駆使していますが、うまくできません。
- ベストアンサー
- その他(データベース)
- Oracle10gで1つのSQLで複数回同じテーブルを結合する場合のパ
Oracle10gで1つのSQLで複数回同じテーブルを結合する場合のパフォーマンス向上 Oracleで1つのSQL内で同じテーブルを2回以上結合すると結果出力にかかる時間が非常に遅くなります。 例: SELECT * FROM A, B b1, B b2 WHERE a.id = b1.id AND a.id = b2.id (テーブルBを2回結合している) こういう場合にパフォーマンスを落とさない方法はありますか?テンポラリテーブルでテーブルBのレプリカを作成して使用するというのはなしです。あくまで1つのSQLで結果出力できることを前提にパフォーマンスを向上する方法を教えてください。
- ベストアンサー
- Oracle
- SQLで同じフィールドを2つ取りだしたい
以下のテーブルからCSVを出力する際、 ID | 名称 | コード1 | コード2 1 | A | 111 | 444 2 | B | 222 | 555 3 | C | 333 | 666 「ID/名称/コード1コード2」のように取りだす場合のSQL文は SELECT ID, 名称, コード1 || コード1 FROM テーブル名 となると思いますがこれを、「ID/名称コード1/名称コード2」のように同じフィールドを同じ行に2回登場させたい場合はどうすれば宜しいでしょうか。 SELECT ID, 名称 || コード1, 名称 || コード2 FROM テーブル名 とした場合にはエラーになってしまいます。 宜しくお願い致します。
- 締切済み
- PostgreSQL
- SQLでテーブルを結合した結果を取り出し
SQLで以下の様なテーブルがあります。 tableA、tableB、tableCを使って、IDとNUMとRANKを結合し、 ID毎に、 RANKが1つでもあったら、”○”でその数を RANKが1つもなかったら、”×”で0を 取り出したい。 「oracle10g」です。 -- tableA ID,NUM,NAME,・・・・・ 000001,001, 000001,002, 000001,003, 000002,001, 000003,001, 000003,002, -- tableB ID,NUM,RANK 000001,001,A 000001,001,B 000001,001,C 000001,002,A 000001,003,C 000002,001,B 000002,002,B 000003,001,A 000003,002,A 000003,002,C --tableC RANK,NAME A, B, C, 結果として、 ID,RANK,判定,個数 000001,A,○,2 000001,B,○,1 000001,C,○,2 000002,A,×,0 000002,B,○,2 000003,A,○,2 000003,B,×,0 000003,C,○,1 を得たいです。 どのようなSQLにしたらよいか、よろしくお願いします。
- ベストアンサー
- Oracle
- group byを使う時に条件をつけたいです。
どう頑張っても思いどうりにDBからデータがとれず困ってます... 例えばこんなテーブルがあったら(テーブル名が"test"、カラムが"name"と"id") table test name | id ---------- aa | 1 aa | 1 aa | 1 bb | 1 bb | 1 aa | 0 aa | 0 cc | 0 カラム"id"が0の時は、カラム"name"のgroup byせず カラム"id"が1の時だけ、カラム"name"のgroup byするには、どうすればいいのでしょう? このような感じにデータを取り出したいのです。 name | id | COUNT ---------- aa | 1 | 3 bb | 1 | 2 aa | 0 | 1 aa | 0 | 1 cc | 0 | 1 よろしくお願いします。
- ベストアンサー
- MySQL
- SQL:複数行のデータを一つの文字列にまとめたい
複数行のデータを一つの文字列にまとめる方法を教えてください。 ※環境SQLServer2005 例: ID DATA AA XXX BB YYY AA ZZZ 次のようなテーブルがあるとき、IDがAAであるものを一つの文字列 "XXXZZZ" にまとめたデータにSQLで加工したいです。
- ベストアンサー
- SQL Server
- ASPによるSQL構文で2つのデータベースを連結
下記のように2つのデータベースを連結させたいのですが うまくいきません。 仕事で緊急なのでわかる方教えてください。 データベースはACCESSです。 テーブル1 A | B(日付) ---|---------- aa |2004/01/01 bb |2004/02/02 テーブル2 C | D(日付) ---|---------- cc |2004/03/03 dd |2004/04/04 ee |2004/05/05 結果 A | BD(日付) | C ---|----------|---- aa |2004/01/01| bb |2004/02/02| |2004/03/03| cc |2004/04/04| dd |2004/05/05| ee strSQL="SELECT A,B,null FROM テーブル1 union all SELECT null,D,C FROM テーブル2" Set RgRs = cnn.Execute(strSQL) 上記の記述で結合させても、うまくいきませんでした。 宜しくお願いします。
- ベストアンサー
- Microsoft ASP
- SQLで条件の文字列を含んでいるデータを取得する方法
SQLにて指定した文字列を含むデータを取得する方法を探しています。 例 テーブル Test 番号 条件 __________ 01 AA 02 BB 03 AA,CC 上記のように、番号と条件という2つのフィールドを持っているテーブルをTestとします。 (1)条件にAAと指定すると、番号01と03が取得。 (2)条件にBBと指定すると、番号02が取得。 (3)条件にAAAと指定すると、一致条件なし。 (1)~(3)のような条件を満たすSQLの構文はありませんでしょうか? ご教授お願いいたします。
- 締切済み
- MySQL
- 連番の最終番号から、符番しレコード作成
いつもお世話になっています。 PL/SQL、ORACLE9.i環境にて、以下の処理を実現するSQL文を教えて頂けないでしょうか。 ※目標は、1つのSQL文で何とかしたいと思っています。 どうかよろしくお願いいたします。 【例】 TBLAにTBLBの内容を追加します。 その時、同一IDのレコードの場合、各ID毎のSEQの最終番号を洗い出し、 最終番号+1づつ設定します。 Key:ID・SEQ TBLA ID │SEQ │DATA ──┼──┼───── 0001│001 │AA1 0001│002 │AA2 0001│003 │AA3 0002│001 │BB1 0002│005 │BB2 ※削除処理の関係上、このようにSEQは歯抜けになっている場合もあります 0003│003 │CC1 TBLB YMD │ ID │DATA ──┼──┼───── 1201│0001│AA5 1201│0001│AA6 1201│0001│AA7 1201│0003│CC1 1201│0004│DD1 1201│0004│DD2 【結果】 TBLA ID │SEQ │DATA ──┼──┼───── 0001│001 │AA1 0001│002 │AA2 0001│003 │AA3 0001│004 │AA5 0001│005 │AA6 0001│006 │AA7 0002│001 │BB1 0002│005 │BB2 0003│003 │CC1 0003│004 │CC1 0004│001 │DD1 0004│002 │DD2
- ベストアンサー
- Oracle
- SQLで二つのテーブルを統合したい
お世話になります。 Access2000のSQLで質問させて下さい。 下記のAとBのテーブルがある状態で、二つを統合した Cを生成したいのですが、どのようにSQLを作成したらよいでしょうか? お手数でもうしわけございませんが、SQL文で回答頂ければ助かります。 --テーブルA--- ID 名前 11 やまだ 12 さかもと --テーブルB--- ID 名前 25 きのした 26 つちや --C-- ID 名前 11 やまだ 12 さかもと 25 きのした 26 つちや
- ベストアンサー
- その他(プログラミング・開発)
お礼
ご回答ありがとうございます。 芸術的で非常に参考になります。恐れいりました。 また参考URLもありがとうございます。 私も頼ってばかりでは無く勉強します、、