- ベストアンサー
アクセス2003 SQL2000を使用してます。
いつもお世話になっています。 下記のようにAテーブルBテーブルを元に Cテーブルのようにデータを出力したいのですが、 SQL文がうかびません。 どなたか教えてください!! ●Aテーブル(取込データ) 名前 | コード1(主コード) ------------------------- 小林 | 100 小林 | 102 田中 | 110 町田 | 130 木村 | 160 木村 | 160 木村 | 180 ●Bテーブル(取込データ) コード1 | コード2 --------------------------- 100 | A 110 | C 130 | D 160 | E ●Cテーブル(出力データ/ABテーブル合体させたもの) ★ ※※※を表示させたい! ↓ここまでは表示はできている↓ 名前 | コード1 | コード2 -------------------------------------------- 小林 | 100 | A 小林 | 102 | ※※※ 田中 | 110 | C 町田 | 130 | D 木村 | 160 | E 木村 | 160 | E 木村 | 180 | ※※※ ↓表示したい内容。不明な点。↓ 名前 | コード1 | コード2 -------------------------------------------- 小林 | 100 | A 小林 | 102 | A 田中 | 110 | C 町田 | 130 | D 木村 | 160 | E 木村 | 160 | E 木村 | 180 | E 以上 よろしく御願いします!!
- SQL Server
- 回答数3
- ありがとう数1
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 >要は、名前に対して、コード1は複数ある可能性があり、 >コード2は1つしか存在しない、のです。 「名前からコード2は一意に決まる」、これが仕様であるということならば、 SELECT a.名前, a.コード1, ISNULL(b.コード2, (SELECT コード2 FROM BTABLE WHERE コード1 IN (SELECT コード1 FROM ATABLE WHERE 名前=a.名前)) ) FROM ATABLE a LEFT OUTER JOIN BTABLE b ON b.コード1=a.コード1 なんて書き方もできますが、SQL Server 2005以降ならば以下の方法が一番楽でしょう。 SELECT a.名前, a.コード1, MAX(b.コード2) OVER (PARTITION BY a.名前) FROM ATABLE a LEFT OUTER JOIN BTABLE b ON b.コード1=a.コード1
その他の回答 (2)
- 3rd_001
- ベストアンサー率66% (115/174)
この仕様だと「名前」がキーにならざるをえないですよね? 「名前」で一意になりますか? また、同姓同名の場合はどうするのでしょうか。 [小林 100]と[小林 102]が同一人物と保証するキー項目はないのでしょうか。 この点をクリアできなければ、正しいデータはセットできませんよ。
補足
ご回答ありがとうございます。 そうです、名前がキーになります。 しかし、その他、社名や住所で一致させることも可能です。
- jamshid6
- ベストアンサー率88% (591/669)
一つ例を書いておきますが、理解頂いた上で、必要な変更を掛けて頂く必要があります。 なぜなら、Aテーブルに(町田, 120)のデータがあったと仮定すると、どう出したいかわからないからです。 (つまり、仕様が明確に記載されていないということです) とりあえずは、「1つ前の有効なコードをセットする」と判断することにします。 この場合、(町田, 120)があった場合のコード2は'C'になります。NULLのままにしたいとか、'D'にしたいとかであれば、変更が必要です。 SELECT a.名前, a.コード1, ISNULL(b.コード2, (SELECT コード2 FROM BTABLE WHERE コード1 IN (SELECT MAX(コード1) FROM BTABLE WHERE コード1<a.コード1) ) ) FROM ATABLE a LEFT OUTER JOIN BTABLE b ON b.コード1=a.コード1
補足
早速のご回答ありがとうございました。 今回のテーブルはNULL不可なので、その点は大丈夫なのですが、 (町田,120)であった場合、'D'に表示したいのです(><) 要は、名前に対して、コード1は複数ある可能性があり、 コード2は1つしか存在しない、のです。 説明が下手で申し訳ございません。。
関連するQ&A
- SQLを教えてください!!
テーブルAとテーブルBがあり、両方に存在しないものを抽出してエラーとする処理を行いたいのですが、 どういうSQlを書いたらいいのか教えてください。 下記例としてテーブルにデータがあったとしたら、結果として 004 商品D 005 商品E 006 商品G というデータを抽出したいのですが・・ テーブルA テーブルB ------------- ----------------------- コード 商品名 NO コード 商品名 001 商品A 1 001 商品A 002 商品B 2 001 商品A 003 商品C 3 002 商品B 004 商品D 4 003 商品C 006 商品G 5 003 商品C 6 005 商品E
- 締切済み
- その他(プログラミング・開発)
- 2つのテーブルで一致しているものを抽出する。SQL文で作成。
OS:WindowsXP SQLServer2000 <質問> SQL文が浮かばなくて困っています。 どなかたお力を貸していただけないでしょうか。 以下、やりたいことです。 【条件】 1 AテーブルとBテーブルで郵便番号が一致しているものを抽出 2 AテーブルとBテーブルに「番号」列を追加し、初期値を「0」とする 3 1の抽出後、同じ郵便番号がBテーブルに複数あった場合、 2で追加した「番号」列を0→”抽出した行分の数字”にする。 一応、【条件】1の箇所(下記)は浮かんだのですが、 2と3が分かりません。 select Aテーブル.*,Bテーブル.* from Aテーブル,Bテーブル left outer join Aテーブル on Aテーブル.郵便番号 = Bテーブル.郵便番号 WHERE ??? ●Aテーブル ID | 名前 | 郵便番号 | 番号 ----------------------------------------------------------------- 01 | 小林 | 101-1000 | 0 02 | 鈴木 | 102-1000 | 0 03 | 田中 | 103-1000 | 0 04 | 町田 | 104-1000 | 0 05 | 木村 | 105-1000 | 0 06 | 中田 | 106-1000 | 0 ●Bテーブル ID | 分類 | 郵便番号 | 番号 --------------------------------------------------------------------- 01 | AAA | 101-5555 | 0 03 | CCC | 103-1000 | 0 04 | DDD | 104-1000 | 0 05 | EEE | 105-1000 | 0 06 | FFF | 105-1000 | 0 07 | GGG | 106-1000 | 0 08 | HHH | 106-1000 | 0 09 | KKK | 106-1000 | 0 ↓出したい結果↓ ID | 名前 | 郵便番号 | 分類 | 番号 ------------------------------------------------------------------------------- 03 | 田中 | 103-1000 | CCC | 0 04 | 町田 | 104-1000 | DDD | 0 05 | 木村 | 105-1000 | EEE | 2 05 | 木村 | 105-1000 | FFF | 2 06 | 中田 | 106-1000 | GGG | 3 06 | 中田 | 106-1000 | HHH | 3 06 | 中田 | 106-1000 | KKK | 3 以上になります。 どうぞよろしくお願い致します。
- ベストアンサー
- SQL Server
- こんなSQLを教えてください
こんなSQLを教えてください <更新前> テーブル1 |キー|コード| | 1| a| | 2| b| | 3| c| テーブル2 |キー|コード| | 2| B| | 4| D| <更新後> テーブル1 |キー|コード| | 1| a| | 2| B| | 3| c| こんなふうに テーブル1と同じデータがテーブル2にあったら テーブル1を書き換えるUPDATE文を教えてください
- ベストアンサー
- Oracle
- ACCSESSのSQLで教えてください。
すみません! SQL初心者なのですが教えてください。 下記のようなtableというテーブルなのですが こちらのテーブルをデータが増加しても(1)から(2)のように select表示させるにはどうすればよいか教えて頂けないでしょうか・・・。 何卒よろしくお願い致します。 テーブル名:table カラム名:NO,kigou (1) table |NO|kigou| |1 |a | |2 |b | |3 |c | |4 |d | |5 |e | ↓ (2) |NO1|kigou1|NO2|kigou2|NO3|kigou3| |1 |a |2 |b |3 |c | |4 |d |5 |e | ・・・
- ベストアンサー
- その他(データベース)
- SQL文で
すみません。質問させてください。 A,B,C,D,Eと5個のフィールドで構成されたテーブルtableがあるとします。 tableにはデータがすべて格納され(NULLなし)ています。 ですが、フィールドA,C,DについてA,C,Dとも同じデータが格納される ことがあります。 その重複したデータ以外を取得したいのですが (要するにフィールドA,C,Dでユニークのデータのみ取得) SQL文でどのように書けばいいかわかりません。 よろしくお願いいたします
- 締切済み
- その他(プログラミング・開発)
- Oracle10gのSQL文についての質問です。
Oracle10gのSQL文についての質問です。 [A]テーブルに CODE(key) NAME と、フィールドがあります。 A NAME-A B NAME-B C NAME-C D NAME-D E NAME-E と、データが入っています。 [B]テーブルに CODE(key) LINE(key) BIKO と、フィールドがあります。 A 1 BIKO-A-1 A 2 A 3 BIKO-A-3 B 1 B 2 B 3 C 1 C 2 BIKO-B-2 C 3 D 1 BIKO-D-1 D 2 BIKO-D-2 D 3 BIKO-D-3 E 1 E 2 E 3 BIKO-E-3 と、データが入っています。 結果が CODE(key) LINE(key) BIKO と、フィールドがあります。 A 1 BIKO-A-1 A 2 BIKO-A-1 A 3 BIKO-A-1 B 1 (null) B 2 (null) B 3 (null) C 1 BIKO-B-2 C 2 BIKO-B-2 C 3 BIKO-B-2 D 1 BIKO-D-1 D 2 BIKO-D-1 D 3 BIKO-D-1 E 1 BIKO-E-3 E 2 BIKO-E-3 E 3 BIKO-E-3 と、したいのです。 つまり、[B]テーブルのLINEが一番小さいBIKOが欲しいのです。 色々と考えてみましたが、解りません。 宜しくお願い致します。
- ベストアンサー
- Oracle
- アクセスレポートのNextRecordについて
アクセス2000を使用しています。 レポートのNexrRecordプロパティの中身が分からないので 教えてください。 以下のテーブルを元にレポートを作成しました。 ****************************** テーブル名:Tテスト ID 名前 (←フィールド名) ------------------------------ 1 田中 2 佐藤 3 鈴木 4 小林 5 大橋 ****************************** レポートの詳細セクションで2件目の フォーマット時、NextRecordをfalse にしましたところ、以下のように出力 されました。 「出力結果」 1 田中 2 佐藤 3 鈴木 4 小林 5 大橋 つまり、テーブルの内容がそのまま出力されました。 素人考えでは、 1 田中 2 佐藤 2 佐藤 3 鈴木 4 小林 5 大橋 なるものとばかり思っておりました。 NextRecordがいつどのように働くのか詳しく教えて いただきたいと思うのですが、どうぞよろしくお願い いたします。 (レポートのセクションの実行順がよくわかりません)
- ベストアンサー
- オフィス系ソフト
- SQLの書き方
当事業所の健康診断管理をVB.Netで行おうとしています 下記ののようなDB内容で『c』のみ検査するスタッフを抽出するSQLはどのようになりますか? フィールド:社員ID、名前、検査種別 0001、中川、A 0001、中川、B 0001、中川、C 0002、木村、A 0002、木村、C 0003、大野、C 0004、田中、A 0004、田中、C 0005、山田、A 0005、山田、B 抽出後は『0003、大野、C』としたいのですが… なかなかいいアイデアがでてきません 独学で勉強しているのですが、うまく処理させることができません (かなりの遠回りでなら処理可能なんですが:汗) ご教授お願いします。
- ベストアンサー
- Visual Basic
- SQL コマンド
データの変換するコマンドを教えてください A|B ==== 1|A 2|B 3|C 4|A 5|D 6|A 7|D というテーブル内容を以下のように出力したいです。 だれがよいコマンドを教えてくださいませんか。 A B C D 1 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
- 締切済み
- PostgreSQL
- ある条件でのSQLの取得方法について
以下の条件でのSQLのデータの取得方法が分かりません。 2つのテーブルがあるとします。 ・テーブルA キー 項目1 10 X 20 Y ・テーブルB キー 項目2 項目3 10 5 C 10 6 D 12 6 E ここで取得する条件として ■テーブルAにあるのは、必ず取得します。 ■テーブルAのキーとテーブルBのキーは繋がり、繋がったテーブルBの情報は 別レコードとして取得します。 ■テーブルAのキー1つに対して、テーブルBのキーは無いかも知れないし、 複数件あるかも知れません。 無い場合はテーブルAの情報のみを出力し、複数件ある場合はその全てを出力します。 ■テーブルBの項目2が同じ値のデータがある場合、テーブルBを出力したレコードと 同じレコードに、項目2が同じデータの情報を出力します。 項目2が同じデータが無い場合はこの情報は出力しません。 項目2が同じ値のデータは最大2件しかありません。 上記の例の場合に出力したい結果 ・出力テーブルC キー フラグ 項目1 項目2 項目3 項目2が同じキー 項目2が同じ値 10 テーブルA X 10 テーブルB 5 C 10 テーブルB 6 D 12 E 20 テーブルA Y (テーブルC のフラグとは、テーブルAの情報かテーブルBの情報かを示します) これを出来ればSQL、出来なければPL/SQLで取得したいのですが どちらの場合でも取得の方法に悩んでいます。 どのような方法で取得できるのでしょうか?
- ベストアンサー
- Oracle
お礼
お礼が遅くなり大変申し訳ございません。 教えていただいたもので出来ました! ありがとうございました!