質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.46%
SQL

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

Q&A

1回答

840閲覧

ひとつのテーブルをサブクエリを利用して別の形にしたい

UTAGAI1013

総合スコア4

SQL

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

0グッド

0クリップ

投稿2020/02/07 11:03

編集2020/02/07 12:08

前提・実現したいこと

TABLE A
_________________
NO 苗字 名前 性別 出身  年齢
1  伊達 北  男  大阪  30
2           大阪  
3  身内 これ 男  大阪  20
4           大阪         
5  家内 ふみ 女  北海道 22
6           稚内
7  候補 変換 男  鹿児島 23
8            霧島
9  問題 南  男  沖縄  25
11           那覇 
10 履歴 東  女  北海道 22
12          函館

TABLE B
____________________
NO 苗字 名前 性別 出身  地区 年齢
1  伊達 北  男  大阪  大阪 30
2  身内 これ 男  大阪  大阪 20    
3  家内 ふみ 女  北海道 稚内 22
4  候補 変換 男  鹿児島 霧島 23
5  問題 南  男  沖縄  那覇 25
6  履歴 東  女  北海道 函館 22

TABLE A を TABLE B のようにサブクエリで結合して並び変えたいのですが、
結合条件がうまくいかず場所がおかしくなったりします。
*を使わず JOIN でどうにかしたいのですが手詰まりです。
初心者なので文章が拙いものですがよろしくお願いします。

追記

SELECT ROW_NOMBER()OVER(ORDER BY NO) AS NO, 苗字, 名前, 性別,  出身,  地区.出身,  NENREI.年齢 FROM TABLE A LEFT JOIN ( SELECT 出身 FROM TABLE A WHERE 出身 %2=0 ) AS 地区 ON 出身 = 地区.出身 LEFT JOIN ( SELECT  年齢 FROM  TABLE A WHERE  NO %2=1 ) AS NENREI ON NO = NENREI.年齢

コードはこれになります。
DBはMicrosoft SQL serverです。
無駄だらけかと思いますがよろしくお願いします。

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

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

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

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

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

m.ts10806

2020/02/07 11:20

まず自身で組んだコードをご提示ください。 また想定のDB、バージョンもご提示ください。
Orlofsky

2020/02/07 12:46

SELECT文の実行結果も追記してください。
Orlofsky

2020/02/07 12:48

修正後のSQLの実行結果を期待したいなら、テーブル定義はCREATE TABLEに、テーブル中のデータはINSERTに修正しては?
sazi

2020/02/07 14:22

11,10,12という並びはワザとその並びにしていますか?
guest

回答1

0

こんなんでいいのでしょうか?

SQL

1CREATE TABLE TABLE_A ( 2 NO INT PRIMARY KEY, 3 苗字 NVARCHAR(255), 4 名前 NVARCHAR(255), 5 性別 NVARCHAR(255), 6 出身 NVARCHAR(255), 7 年齢 INT 8); 9 10INSERT INTO TABLE_A VALUES (1, N'伊達', N'北', N'男', N'大阪', 30); 11INSERT INTO TABLE_A VALUES (2, NULL, NULL, NULL, N'大阪', NULL); 12INSERT INTO TABLE_A VALUES (3, N'身内', N'これ', N'男', N'大阪', 20); 13INSERT INTO TABLE_A VALUES (4, NULL, NULL, NULL, N'大阪', NULL); 14INSERT INTO TABLE_A VALUES (5, N'家内', N'ふみ', N'女', N'北海道', 22); 15INSERT INTO TABLE_A VALUES (6, NULL, NULL, NULL, N'稚内', NULL); 16INSERT INTO TABLE_A VALUES (7, N'候補', N'変換', N'男', N'鹿児島', 23); 17INSERT INTO TABLE_A VALUES (8, NULL, NULL, NULL, N'霧島', NULL); 18INSERT INTO TABLE_A VALUES (9, N'問題', N'南', N'男', N'沖縄', 25); 19INSERT INTO TABLE_A VALUES (10, NULL, NULL, NULL, N'那覇', NULL); 20INSERT INTO TABLE_A VALUES (11, N'履歴', N'東', N'女', N'北海道', 22); 21INSERT INTO TABLE_A VALUES (12, NULL, NULL, NULL, N'函館', NULL); 22 23SELECT 24 A.NO / 2 + 1 AS NO, 25 A.苗字, 26 A.名前, 27 A.性別, 28 A.出身, 29 B.出身 AS 地区, 30 A.年齢 31FROM (SELECT * FROM TABLE_A WHERE NO % 2 = 1) A 32JOIN (SELECT * FROM TABLE_A WHERE NO % 2 = 0) B 33ON A.NO = B.NO - 1;

実行結果

NO 苗字 名前 性別 出身 地区 年齢 1 伊達 北 男 大阪 大阪 30 2 身内 これ 男 大阪 大阪 20 3 家内 ふみ 女 北海道 稚内 22 4 候補 変換 男 鹿児島 霧島 23 5 問題 南 男 沖縄 那覇 25 6 履歴 東 女 北海道 函館 22

投稿2020/02/11 01:49

hoshi-takanori

総合スコア7895

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問