teratail header banner
teratail header banner
質問するログイン新規登録
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

795閲覧

SQL文:行数が異なる結果の結合

H_HW

総合スコア1

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2022/08/03 04:07

編集2022/08/03 04:31

0

1

前提

SQLにてテーブル1結果とテーブル2結果の
IDをキーに両結果が全て表示できるように結合したい

【テーブル1】       【テーブル2】
| ID | kekka1         | ID | kekka2
|1 | りんご          | 1 | 2021
|1 | みかん          | 1 | 2022
|2 | りんご          | 1 | 2023
|3 | りんご          | 1 | 2024
|3 | みかん          | 3 | 2022
|4 | りんご

実現したいこと

下記のような結果にしたい。

| ID | kekka1 | kekka2 |
|1 |りんご  | 2021
|1 |みかん  | 2022
|1 |     | 2023
|1 |     | 2024
|2 |りんご  |
|3 |りんご  | 2022
|3 |みかん  |
|4 |りんご  |

発生している問題・エラーメッセージ

なし

該当のソースコード

SQL

1SELECT テーブル1.ID , テーブル1.kekka , Nen.kekka 2 FROM テーブル1 3LEFT JOIN ( 4      SELECT テーブル2.ID , テーブル2.kekka 5      FROM テーブル2 6      ) AS Nen 7on テーブル1.ID = Nen.ID

試したこと

LEFT JOIN、INNER JOIN、UNIONなど

補足情報(FW/ツールのバージョンなど)

Microsoft SQL Server management studio17

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2022/08/03 04:12

MSのSQLSERVER環境であればMySQLタグは外してください
guest

回答1

0

ベストアンサー

SQLにはデータのorder byを指定しないで優先順位というものがありませんので
今のデータ形式だけでは希望する結果を導くことは難しいでしょう。
それぞれのテーブルにauto_incrementな主キー設定をして明示的に優先順位をきめられるなら
対応できるかもしれません
※SQLSERVERと文法が多少異なるかもしれませんがサンプル

SQL

1CREATE TABLE tbl1( 2pid int primary key auto_increment, 3id int, 4kekka1 varchar(10) 5); 6insert into tbl1(id,kekka1) values 7(1,'りんご'), 8(1,'みかん'), 9(2,'りんご'), 10(3,'りんご'), 11(3,'みかん'), 12(4,'りんご'); 13 14CREATE TABLE tbl2( 15pid int primary key auto_increment, 16id int, 17kekka2 varchar(10) 18); 19insert into tbl2(id,kekka2) values 20(1,'2021'), 21(1,'2022'), 22(1,'2023'), 23(1,'2024'), 24(3,'2022'); 25 26select t3.id,t4.kekka1,t5.kekka2 from ( 27select id,(select count(*)+1 from tbl1 where id=t1.id and pid<t1.pid) as rank 28from tbl1 as t1 29union 30select id,(select count(*)+1 from tbl2 where id=t2.id and pid<t2.pid) as rank 31from tbl2 as t2 32) as t3 33left join ( 34select kekka1,id,(select count(*)+1 from tbl1 where id=t1.id and pid<t1.pid) as rank 35from tbl1 as t1 36) as t4 on t3.id=t4.id and t3.rank=t4.rank 37left join ( 38select kekka2,id,(select count(*)+1 from tbl2 where id=t2.id and pid<t2.pid) as rank 39from tbl2 as t2 40) as t5 on t3.id=t5.id and t3.rank=t5.rank 41order by t3.id,t3.rank

投稿2022/08/03 04:18

編集2022/08/03 04:30
yambejp

総合スコア117914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問