• ベストアンサー

2レコードずつ表示させたい。

VB2005、FlexGrid.NET環境です。 SQLを投げて、結果をグリッドに表示するプログラムを作っています。 ちょっとややこしいのですが…。 たとえば、 テーブルA   テーブルB ----------------------------------------- ごはん 朝 ----------------------------------------- 魚 朝 ----------------------------------------- 肉 夜 ----------------------------------------- テーブルAには、食べ物の一覧のデータが入っていて、 JOINするテーブルBにはそれを朝食べたのか夜食べたのか判定する フラグがあります。 これを、下記のようにしたいのですが テーブルA   テーブルB ----------------------------------------- ごはん 朝 ○ ごはん      夜 ----------------------------------------- 魚 朝 ○ 魚       夜 ----------------------------------------- 肉 朝 肉 夜 ○ ----------------------------------------- SQL的には、フラグのカラムが0なら朝、1なら夜、みたいに 表示しているのですが、キーが複数個あるので、朝と夜、肉を 食べたということもありえます。 なので、フラグに関わらず、朝と夜の2レコードを表示させて おきたいのですが、この動作を実現させる方法を教えていただけ ないでしょうか? ImportRowとか使えば出来そうな気がするんですが、うまくいかず 困っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • NYOI
  • ベストアンサー率58% (56/96)
回答No.1

VB側で処理するより、SQL側で処理した方が早いかな? ・テーブルAとテーブルBをLEFT JOINでつなぐ。 ・朝食べたものだけを抽出するクエリと夜食べたものだけを抽出するクエリをUNIONする。  て感じで。こうすれば各食べ物で2行ずつ出るはずです。 SELECT テーブルA.* , テーブルB.フラグ , '1' AS SORTFLG FROM テーブルA LEFT JOIN テーブルB ON テーブルA.食べ物 = テーブルB.食べ物 WHERE テーブルB.フラグ = 朝 UNION SELECT テーブルA.* , テーブルB.フラグ , '2' AS SORTFLG FROM テーブルA LEFT JOIN テーブルB ON テーブルA.食べ物 = テーブルB.食べ物 WHERE テーブルB.フラグ = 夜 ORDER BY テーブルA.食べ物,SORTFLG

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

その他の回答 (1)

noname#140971
noname#140971
回答No.2

SQL文に関する質問だとすれば・・・。 A: ID__品名 1___ごはん 2___魚 3___肉 B: ID__A_ID___判定子 1________1__________0 2________2__________0 3________3__________1 クエリ: 品名_____時間___判定子丸表示 ごはん___朝______O ごはん___夜________ 魚_________朝______O 魚_________夜________ 肉_________朝________ 肉_________夜______O SELECT A.品名, "朝" AS 時間, "O" AS 判定子丸表示 FROM A RIGHT JOIN B ON A.ID=B.A_ID WHERE (((B.判定子)=0)) UNION SELECT A.品名, "朝" AS 時間, "" AS 判定子丸表示 FROM A RIGHT JOIN B ON A.ID=B.A_ID WHERE (((B.判定子)=1)) UNION SELECT A.品名, "夜" AS 時間, "" AS 判定子丸表示 FROM A RIGHT JOIN B ON A.ID=B.A_ID WHERE (((B.判定子)=0)) UNION SELECT A.品名, "夜" AS 時間, "O" AS 判定子丸表示 FROM A RIGHT JOIN B ON A.ID=B.A_ID WHERE (((B.判定子)=1)); B: ID__A_ID___判定子 1________1__________0 2________2__________0 クエリ: 品名_____時間___判定子丸表示 ごはん___朝______O ごはん___夜________ 魚_________朝______O 魚_________夜________ 仮にBに肉に関する情報がなければこのようになります。

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

関連するQ&A

  • GROUP_CONCAT✕複数列で、違うレコード数

    MySQLで、「GROUP_CONCAT」を「複数列」に適用させ、それぞれ異なるレコードを1つにまとめようとしたのですが、 取得出来る結果が、多い方の数に引き連られてしまいます。 ざっくりとした質問でアレなのですが、これは結合の仕方が悪い、 と推測されるでしょうか? そもそも「GROUP_CONCAT」を複数列に適用させる場合、それぞれ異なるレコード数をまとまることはできるのでしょうか?。 ■期待した取得結果 [テーブルAカラムc] => tokyo,osaka [テーブルAカラムd] => japan,japan [テーブルBカラムe] => windows [テーブルBカラムf] => man ■実際の取得結果 [テーブルAカラムc] => tokyo,osaka [テーブルAカラムd] => japan,japan [テーブルBカラムe] => windows,windows [テーブルBカラムf] => man,man 「テーブルB」の取得結果が、「テーブルA」取得結果数に引き連られてしまいます ■SQL(抜粋) SELECT  GROUP_CONCAT(a.c) AS c,  GROUP_CONCAT(a.d) AS d,  GROUP_CONCAT(b.e) AS e,  GROUP_CONCAT(b.f) AS f FROM hoge h LEFT JOIN テーブルA a ON (h.id = a.hoge_id) LEFT JOIN テーブルB b ON (h.id = b.hoge_id)

  • グリッドの2段表示

    グリッドの表示で困ってます。 1行を2段で表示したいのですが、 方法がわかりません。 出し方としては 項目A|項目C 項目B| あああ ううう いいい と表示したいと思ってます。 DataGridもしくはMS-FlexGridで 実装したいと思ってます。 よろしくお願いします。

  • 一番新しいdatetime型列があるレコードを取得

    下記条件を満たすSQL文を知りたいのですが、どう書けばよいでしょうか? ■構成 Aテーブル ・「id」カラム ・「created_at」カラム … datetime型 ・「area」カラム Bテーブル ・「a_id」カラム ・「created_at」カラム … datetime型 ■前提 ・Aテーブルの1レコード(「id」カラム)に対して、0~複数のBテーブルレコード(「a_idカラム」)がある ・A.id = B.a_id ■欲しい内容 ・「Aテーブル」「Bテーブル」それぞれのカラム内容全部。※条件あり ▼条件1 Aテーブル「id」カラムに対応したBテーブルの「a_id」が複数ある場合には、該当Aテーブル内容+ Bテーブル「created_at」カラムの値が一番新しいレコードを返す(取得レコード数は常に1) ▼条件2 Aテーブル「id」カラムに対応したBテーブルの「a_id」がなかった場合には、該当Aテーブル内容+ Bテーブル側は何も返さない ▼条件3 ※同名カラムを取得する際には、カラム名先頭にそれぞれa、bを付与(「acreated_at」「bcreated_at」) ・後で、それぞれのテーブルカラムとして利用したいだけなので、それが出来れば形式にこだわりはありません

    • ベストアンサー
    • MySQL
  • SELECT/別テーブルのレコード数も取得したい

    ■環境 ・MySQL ■前提 ・テーブルA … idカラム ・テーブルB … A_idカラム ■やりたいこと ・テーブルAデータを取得する際、テーブルAレコードに応じて、テーブルB「A_idカラム」の数(レコード数)も取得したい ■取得イメージ例 ・テーブルA「全カラム」、「count」カラム ※「count」カラム … テーブルBにある「A_idカラム」の数 ■知りたいこと ・どこにも存在しないこの「count」カラムはどうやって作成したら良いでしょうか? ・全体のSQL文

    • ベストアンサー
    • MySQL
  • ポスグレ レコードの比較

    ポスグレDBで以下のような二つのテーブルがあって レコード数、カラム等の構造も同じだったとして カラム1の値が二つのテーブルで同じであり カラム2~4のうちどれか一つでも違うレコードを抽出するSQLがわかりません。 下記の例で言うと抽出結果がスキーマA.テーブルAの「←」のレコードを抽出したいです。 スキーマA.テーブルA カラム1|カラム2|カラム3|カラム4| --------------------------- A |aaaaaaa|bbbbbb|ccccccc --------------------------- B |aaaaaaa|bbbbbb|ccccccc      ← --------------------------- C |aaaaaaa|bbbbbb|ccccccc      ← --------------------------- D |aaaaaaa|bbbbbb|ccccccc      ← --------------------------- E |aaaaaaa|bbbbbb|ccccccc スキーマB.テーブルB カラム1|カラム2|カラム3|カラム4| --------------------------- A |aaaaaaa|bbbbbb|ccccccc --------------------------- B |1111111|bbbbbb|ccccccc --------------------------- C |aaaaaaa|777777|ccccccc --------------------------- D |2222222|bbbbbb|8888888 --------------------------- E |aaaaaaa|bbbbbb|ccccccc よろしくお願いします。

  • グリッドの内容をコピーしたい。

    VB2005、FlexGrid.NET環境です。 SQLを投げて、FlexGridに表示されたデータをCSVに出力するということを やっています。 CSVの出力は、グリッドを指定すれば、その内容をCSVに出力する関数が 用意されているので、それを用いて行っています。 グリッドにはいくつか非表示に設定している列(VisibleをFalseに) があるのですが、CSV出力用の関数を使うと、その非表示の列までCSVに 出力されるので困っています。 たとえば A B C 1 1 1 2 2 2 3 3 3 B列が非表示設定にしてあっても、ABCすべてがCSVに出てくるのです。 方法としては、内部的にCSVに出力するためのグリッドを作り、(上の 例でいえば、A、CのデータをコピーしてB列がないグリッドを作る) それをCSVさせる…というやり方しかないかと思うんですが、この 表示されているグリッドの中身(ヘッダも)を列を選択してコピーする という処理がうまく作れません。 サンプル的にコードを交えて教えていただけないでしょうか? 宜しくお願いします。

  • 複数テーブルを結合するには?

    OS:WINDOWSXP SP2 ORACLE:Oracle9i Enterprise Edition Release 9.2.0.1.0 A, B, Cというテーブルがあるとします。 それぞれのテーブルには XXカラムと YYカラムがあるとします。 2つのテーブルを結合させるには、以下のSQL文を記述すれば良いと考えています。 SELECT A.*,B.* FROM A JOIN B ON A.XX = B.XX 3つのテーブルを結合するには、以下のSQL文を記述しています。 SELECT A.*,B.*,C.* FROM A JOIN B ON A.XX = B.XX JOIN C ON A.XX = C.XX 但し、この記述方法でいきますと、Cテーブルを右側外部結合に指定した場合のみ、 ORA-00904 "C" 無効な識別子です。 というエラーメッセージが表示されます。 SELECT A.*,B.*,C.* FROM A JOIN B ON A.XX = B.XX RIGHT OUTER JOIN C (←LEFT OUTER、FULL OUTER)なら通ります) ON A.XX = C.XX 何故、右側外部結合のみ不正となるのか不明であり、解決策が見つかりません。 複数のテーブルを結合する為のSQL文の記述方法を教えて頂けますでしょうか?

  • レコード集計のSQLについて

    お世話になります。 SQL Serverに関する質問です。 以下の内容を満たすSQLを作成したいのですが、 方法がわからず困っています。 (内容) *************************************************************** ・Aテーブル、Bテーブルには、以下のレコードが格納されています。 [Aテーブル] | key_code | code1 | code2 | code3 | money | person | ← カラム名 ---------------------------------------------- | 001 | 1 | 1 | 1 | 1000 | 10 | ---------------------------------------------- | 001 | 1 | 2 | 1 | 3000 | 10 | ---------------------------------------------- | 001 | 1 | 1 | 1 | 1000 | 10 | ---------------------------------------------- [Bテーブル] | key_code | cd1 | cd2 | cd3 | cd4 | cd5 | ・・・・・ | cd10 | ← カラム名 ------------------------------------------------------------ | 001 | 01 | 02 | 10 | 30 | 51 | ・・・・・ | 90 | ------------------------------------------------------------ | 002 | 01 | 02 | 03 | 10 | 40 | ・・・・・ | 55 | ------------------------------------------------------------ ・Aテーブルの key_code とBテーブルの key_code を関連付けて、  Bテーブルのcd1~cd10に格納されている各コード単位に集計した  Aテーブルのmoney及びpersonの値を取得したい。  例えば、 key_code = '000' でAテーブルとBテーブルを関連付けして、 Bテーブルのcd(1~10) = '10' で集計した Aテーブルの money と personの 値を求めたい。 **************************************************************** 初歩的な質問で申し訳ございませんが、 どなたかご教授願えませんでしょうか? よろしくお願いいたします。

  • PostgreSQLで表結合+DELETEしたい

    PostgreSQLで、テーブル(2)の情報をキーに(1)を削除したいのですが、エラーが出てしまいます。 どなたか解決策をご存知の方いらっしゃいましたら ご教授宜しくお願い致します。 _構造_____________________ テーブル(1)・・カラムA テーブル(2)・・カラムA、カラムB _SQL文_____________________ DELETE FROM (1) INNER JOIN (2) ON (1).カラムA= (2).カラムA WHERE (2).カラムB=X _エラーメッセージ__________ [Err] ERROR: syntax error at or near "INNER"

  • SQLでの条件分岐

    現在SQLの勉強をしているのですが、条件分岐の方法がわかりません。 全社員を登録したテーブルAと一部社員のみが登録されたテーブルBがあり、両テーブルを外部結合し、Bに登録されているかどうかでフラグを設定しています。 select A.*, B.*, NVL2(A.EMP_NO,'1','0') flag from A left outer join B on A.EMP_NO = B.EMP_NO and A.EMP_NAME = B.EMP_NAME ・上記SQLで設定したフラグの値をもとに、(1)Aのみに登録された社員、(2)Bのみに登録された社員、(3)両テーブルに登録された社員を出すためにはどのようにすれば宜しいでしょうか。 (2)、(3)に関しては、上記パターンならテーブルそのものを出せば済む話なのですが、今後のためにフラグから判定する方法でご教授お願いいたします。

このQ&Aのポイント
  • 中学受験の算数問題に関する質問です。問題の内容は、整数Aを4で割った計算をしている際に小数点を忘れ、誤った答えが出てしまった場合の正しい答えと整数Aの値についてです。
  • 解答では、整数4で割った場合の答えの小数点以下の値が0.25か0.5か0.75のいずれかであることが示されています。そして、小数点を忘れた場合には整数の答えになってしまうため、正しい答えとの差が76.5となることから、正しい答えは0.25か0.5か0.75のいずれかだと分かります。また、小数点を打ち忘れた場合には答えが10倍になることも説明されています。
  • しかし、子どもはこの問題を理解できず、質問者自身も説明することができません。塾の先生も理解できなければやらなくても良いと言っています。質問者はどのように子どもに教えるべきか、教え方のコツやアイディアを求めています。
回答を見る