• 締切済み
  • すぐに回答を!

複数行の結果を単一列に連結(複数のテーブルを参照)

psql (PostgreSQL) 7.3.4です。 困っています 以下のような【TABLE1】と【TABLE2】を TABLE1のt1tot2にで結合した結果を 【A.結果】のように★▲●の行を1行に表示させて取得したいのですがうまくいきません。 【TABLE1】 ID,ID_SUB, TYPE, VALUE A A1 t1 1 ★ A A1 t2 2 ★ A A1 t1 1 ▲ A A1 t2 3 ▲ B B1 t1 1 ● B B1 t2 3 ● 【TABLE2】 ID, TYPEV1 ,TYPEV2 ,Code A 1 1 AAA1 A 1 2 AAA2 ★ A 1 3 AAA3 ▲ B 1 3 BBB1 ●  TYPEV1=TABLE1のt1の値 TYPEV2=TABLE1のt2の値 【得たい結果】 ID, ID_SUB, TYPEV1, TYPEV2,Code A A1 1 2 AAA2★ A A1 1 3 AAA2▲ B B1 1 3 BBB1● 下記でTABLE1の2行を1行にまとめることができましたが、 問題のTABLE2との連結方法が分かりません。 select TABLE1.ID , TABLE1.ID_SUB , TABLE1.VALUE as t1 , (SELECT tbl1.VALUE FROM TABLE1 tbl1 where tbl1.TYPE=t2 and (TABLE1.ID , TABLE1.ID_SUB)=(tbl1.ID , tbl1.ID_SUB)) as t2 from TABLE1 where TABLE1.TYPE = t1 【結果】 ID ,ID_SUB , t1  ,t2 A A1 1 2 ★ A A1 1 3 ▲ B B1 1 3 ● 何か良い方法はありますでしょうか?

共感・応援の気持ちを伝えよう!

  • PostgreSQL
  • 回答数1
  • 閲覧数287
  • ありがとう数2

みんなの回答

  • 回答No.1
  • alte_6
  • ベストアンサー率60% (9/15)

カラム名と同様にカンマ区切りしたほうがいいですよ。 結合方法が良く分かりません > TYPEV1=TABLE1のt1の値 >TYPEV2=TABLE1のt2の値

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 複数行の結果を単一列に連結

    以下のような【TABLE1】と【TABLE2】をID_SUBの列で結合した結果を 【A.結果】のように取得したいのですがうまくいきません。 【TABLE1】 ID ID_SUB 1 A1 2 B1 【TABLE2】 ID ID_SUB ID_SUB_CODE 1 A1 AAA1 2 A1 AAA2 3 B1 BBB1 4 B1 BBB2 【A.結果】 ID_SUB ID_SUB_CODE A1 "AAA1,AAA2" B1 "BBB1,BBB2" いろいろ調べたのですが、MySQLにはGROUP_CONCATの 関数を使うと簡単に出来るみたいですが、PostgreSQLには 似たような関数がなく、ARRAYが使えるかな?と思ってためしてみましたが array_to_string(ARRAY(ID_SUB_CODE, ',')) 等のような感じで試した結果、ID_SUB_CODEが 全て連結されるような使い方しか出来ませんでした。 A1 "AAA1,AAA2,BBB1,BBB2" B1 "AAA1,AAA2,BBB1,BBB2" 何か良い方法はありますでしょうか?

  • mysql 複数テーブルの条件付け摘出

    こんにちは。 初歩的なことだと思うのですが、複数テーブルからのレコード摘出で躓いてしまったのでご教授ください。 以下のような2つのテーブルがあったとして、 table_a ---------------- acount_no / name 1 / aaa 2 / bbb table_b ---------------- acount_no / value / update_at 1 / 0000 / 2012-05-12 2 / 3333 / 2012-05-12 1 / 1111 / 2012-05-13 2 / 5555 / 2012-05-13 table_aのacount_noとnameは必ず必要で、table_bのupdate_atに対応するvalueを条件付けで取り出したい場合はどのようにしたら良いのでしょうか。 レコードに存在しない日付を指定したときには、空欄で欲しいのですが・・・、 acount_no / name / value 1 / aaa / null 2 / bbb / null 例えば、 select a.acount_no,name,value from table_a as a LEFT JOIN table_b as b ON a.acount_no = b.acount_no where b.update_at = '2012-05-14' order by a.acount_no asc とすると結果が0行になってしまいます。 外部結合の使い方が間違っているのでしょうか・・・。 お力添えの程、宜しくお願い申し上げます。

    • ベストアンサー
    • MySQL
  • 抽出条件入力用テキストボックスが空白の場合の抽出条件

    SQL初心者です。 今あるテーブル(TABLE)に | VALUE_A | VALUE_B | VALUE_C | VALUE_D | ----------------------------------------- | 000 | AAA | AAA | AAA | | 001 | AAA | AAA | BBB | | 002 | AAA | BBB | AAA | | 003 | BBB | BBB | BBB | | 004 | BBB | BBB | NULL | のようなデータが入っているとします。 Web上から VALUE_B VALUE_C VALUE_D に対しそれぞれテキストボックス入力フィールドから値を入力し検索を行うようにしたいのです。 [VALUE_B]=AAA [VALUE_C]=AAA [VALUE_D]=AAA と入力されれば VALUE_A:000 を検索結果として出します。 [VALUE_B]=AAA [VALUE_D]=AAA と入力されれば VALUE_A:000 VALUE_A:002 を検索結果として出します。 [VALUE_B]=AAA だけが入力された場合は VALUE_A:001 VALUE_A:002 VALUE_A:003 を検索結果として出します。 つまり、フォームのテキストボックスに入力された条件で抽出し、入力が無い場合は全件抽出を行いたいのです。 この場合、どのようなSQLを組めばよいのかわかりません。ANDやORだけでは対応できないような気がします。Oracleを始めたばかりということもあり、どのような関数を使えばよいのかもわかりません。どなたかご教授いただけませんでしょうか??よろしくお願いします。

  • 複数のテーブルからのデータ抽出

    こんばんは。お世話になっております。 テーブル(A) id | no | image -------------------- 1 | みかん| aaa.gif 2 | なし | bbb.gif 3 | いちご| ccc.gif テーブル(B) m_id | t_id ---------------- 1  |  3 2  |  2 1  |  2 というようなテーブルがあるのですが、テーブルBのm_id、1を検索した際、t_idを抽出、かつそのt_idと同じ番号であるテーブルAのimageをも抽出したいと考えています。 結果としては、以下のような感じ。 3  ccc.gif 2  bbb.gif $m_id =$_GET["id"]; //途中省略 $sql= "select * FROM B INNER JOIN A ON B.m_id = A.id WHERE m_id = '$m_id'"; としているのですが、テーブルBのt_idは検索されるものの、テーブルAのimageは全てaaa.gifと返ってきてしまいます。 先日、こちらでテーブルの正規化として、データを分散させる考え方をお教え頂き、早速それに習って構成してみたのですが、思うようにデータを抽出出来ずにアドバイスを頂戴したく投函させていただきました。 先のソースで可笑しな点などの忠告や、アドバイスなど頂戴できれば幸いです。宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • 2つのテーブルの間で条件に合致した行を合計して引きたい

    すいません、適切なタイトルが浮かばず、あやふやなタイトルになってしまいました・・・ MySQLバージョン4.1.16を使っています。 2つのテーブルがあって、 table1には「id,x,y,value1」、table2には「x,y,value2」、 の列がそれぞれあるとします。 サンプル [table1] id,x,y,value1 1 1 1 100 2 1 2 160 3 1 3 120 [table2] x,y,value2 1 1 20 1 1 30 1 3 10 table1のidが1で、table1のx,yとtable2のx,yがそれぞれ等しい場合にのみ table1のvalue1からtable2のvalue2(列でxが同じ、yが同じ行があったならvalue2を合計して)を 引くということがやりたいのです。 そこで以下のようにして試してみたのですが、 UPDATE table1 t1, table2 t2 SET t1.value1 = t1.value1 - t2.value2 WHERE t1.id = '1' AND t1.x = t2.x AND t1.y = t2.y; これだとtable2の行が1つだと希望どおりに動作するのですが、 2つ以上だと1つ目の行しか引いてくれません。 サンプルに当てはめると、[table1]のid=1のvalue1は80になります(希望は50) どのようにSQLを記述すれば良いのでしょうか?

    • ベストアンサー
    • MySQL
  • 複数行の結果を一行でSELECTするには

    2つのテーブルからデータを取得します。 FKがstaff_idになります。 ●staff_tbl staff_id staff_name staff_group 1     田中     A  2     鈴木     A 3     森田     B ●value_tbl staff_id value_name value 1     area     大阪 1     year      5 1     pay      1000 2     area     奈良 2     year      2 2     pay      900 テーブルのサンプルはこのようなイメージです。 結果を下記のように取得したいのですが。。。 1 田中 A 大阪  5 1000 2 鈴木 A 奈良  2 900 サブクエリを使うのか?TOを使うのか、ググって何度か試したけども いまいちわかりませんでした。 どのようなSQLになるんでしょうか? すいませんが、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 複数のテーブルを使ってselectしたい

    以下のようなことをしようと思っていますが、いろいろやってみてもできなかったのでお尋ねします。 ログインのログを集計しています。 テーブルの構成は大まかには ID logintime aaa 2004-11-10 10:10:10 bbb 2004-11-10 10:10:11 ccc 2004-11-10 10:10:12 aaa 2004-11-10 10:10:13 aaa 2004-11-10 10:10:14 という構成です。 これが1日ごとに、 log_20041108 log_20041109 log_20041110 log_20041111 という感じで並んでいます。 それで、やりたいことは「ユニークログイン数のカウント」です。 1日であれば > select count(distinct id) from log_20041111; などでできると思うのですが、 (上記の例で行くとこれは3になりますね。) これをイメージ的には > select count(distinct id) from log_20041111,log_20041110,log_20041109; のように、複数のテーブルでやりたいのです。 ID logintime aaa 2004-11-11 10:10:10 bbb 2004-11-11 10:10:11 ccc 2004-11-11 10:10:12 aaa 2004-11-11 10:10:13 aaa 2004-11-11 10:10:14 ID logintime aaa 2004-11-10 10:10:10 bbb 2004-11-10 10:10:11 ddd 2004-11-10 10:10:12 aaa 2004-11-10 10:10:13 ID logintime aaa 2004-11-09 10:10:10 bbb 2004-11-09 10:10:11 eee 2004-11-09 10:10:12 これに対して、「5」という結果が取り出したいのです。 (aaa, bbb, ccc, ddd, eeeの5人) 何かいい方法がないでしょうか?? 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • 複数の列を繋げてA列に入れたい VBA

    aaa aaa  bbb aaa  bbb  ccc aaa (A列にaaa、B列にbbb、C列にcccが入ってます) と言うデータがあるのですが 全てA列に入れて aaa aaabbb aaabbbccc aaa としたいです。 ・最終列は必ずしもCではないのです。(Dの場合もEの場合もある) ・最終行も変化します。 Sub 分かれてる列を繋げる() Dim Col As Long Dim Row As Long For Row = 1 To Range("a65536").End(xlUp).Row   For Col = 1 To Cells(Row, 256).End(xlToLeft).Column    Cells(Row, 1) = Cells(Row, 1) & Cells(Row, 2) & Cells(Row, 3)    Next Col Next Row End Sub をやってみましたが、 aaa aaabbbbbb aaabbbcccbbbcccbbbccc aaa となってしまい、 欲しい結果とは違くなってしまいます。

  • EXCELで複数行の検索

    初心者です。 Aファイルのaaa、bbbなどをキーに Bファイルを検索してできるだけ簡単にマクロ等使わずに 下記のような抽出をする方法があれば教えてください。 よろしくお願いします。 Aファイル aaa bbb ccc Bファイル(例えば「ddd」と「あ」は別セルです) ddd あ eee い aaa う fff え bbb お ggg か ccc き 結果 Aファイル aaa う bbb お ccc き

  • 複数テーブルの集計結果の問い合わせ

    mysqlで、例えば 客table id|氏名 --|--- 01|あ 02|い 03|う 注文table 客|商品 --|--- 03|A 02|B 03|C 01|B 苦情table 客|内容 --|--- 01|aaa 01|bbb 02|ccc 01|ddd というテーブルがあるときに、結果として id|氏名|注文数|苦情数 --|----|------|------ 01|あ |1   |3 02|い |1   |1 03|う |2   |0 という表を得るには、どういうsql文を書けばよいのでしょうか? もし苦情数なしで注文数だけであれば、 SELECT 客.id, 客.氏名, COUNT(*) FROM 客 LEFT JOIN 注文 ON 注文.客 = 客.id GROUP BY 注文.客; で可能だと思うのですが、そこから先が分かりません。そもそも一行のsql文で可能なのでしょうか?

    • ベストアンサー
    • MySQL