いつもお世話になっています。
下記のように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
以上 よろしく御願いします!!
No.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
No.2
- 回答日時:
この仕様だと「名前」がキーにならざるをえないですよね?
「名前」で一意になりますか?
また、同姓同名の場合はどうするのでしょうか。
[小林 100]と[小林 102]が同一人物と保証するキー項目はないのでしょうか。
この点をクリアできなければ、正しいデータはセットできませんよ。
No.1
- 回答日時:
一つ例を書いておきますが、理解頂いた上で、必要な変更を掛けて頂く必要があります。
なぜなら、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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- Oracle sqlのupdate文で質問です。 テーブルBの番号をキーにテーブルAの身長をテーブルBの身長に更新 2 2022/11/02 15:15
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- PHP MySql PHP 2つのテーブルをJOINで結合 user_idで抽出 1 2023/01/03 14:04
- MySQL 【MySQL】本当に困っているので、助けてください。よろしくお願いします。 3 2023/06/03 14:24
- Excel(エクセル) Excelマクロの差分抽出のコードを教えていただきたいです。 2 2023/03/14 11:40
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- 野球 広島東洋カープ 1 2022/07/20 12:30
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
3つのテーブルから条件に一致し...
-
重複するキーから一番古い年月...
-
Accessユニオンクエリーで2つ...
-
片方だけ抽出する方法(SQL)
-
VIEWでテーブルの集計結果...
-
SQL文をどう記述すれば良い...
-
行方向のデータを横に並べる
-
続.ORACLEのSELECTのソートに...
-
MySQLのgroup by同士の結合につ...
-
SQL文で質問
-
SQL、ストアドでのUPDATEのアド...
-
重複するレコードを調べるSQL
-
問い合わせ結果が得られるまで...
-
項目長変更後の処理について教...
-
アクセス2003 SQL2000を使用し...
-
正規化されていないテーブルの...
-
ある条件のSELECT文の作成について
-
ACCESSのコンパイルエラーについて
-
テーブルの結合について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
2つのテーブルから条件に一致...
-
重複するキーから一番古い年月...
-
ACCESS 一つのフィールドに複...
-
行方向のデータを横に並べる
-
商品コード番号を入力すると商...
-
PLSQLの識別子エラー
-
Inner join と Left joinの明...
-
片方だけ抽出する方法(SQL)
-
Accessユニオンクエリーで2つ...
-
SQL 2つのテーブルとSUBSTRING...
-
主キーの変更
-
Accessでフィールドを比較した...
-
続.ORACLEのSELECTのソートに...
-
SQL文について(片方のテーブル...
-
場合によって条件を変えるSQL
-
請求と入金のテーブルの作成の...
-
sqlのupdate文で質問です。 テ...
-
accessで移動平均する方法
-
[Oracle] UPDATE分の副問い合わ...
おすすめ情報