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

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

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

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

SQL

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

Q&A

3回答

1262閲覧

SQL server内にあるテーブルの名前が一部一致しているテーブルを1つのテーブルにしたい。

namonakiSE

総合スコア12

SQL Server

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

SQL

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

0グッド

0クリップ

投稿2020/06/09 01:41

SQL serverにあるテーブルで、foge_01_2020, foge_02_2020, foge_03_2020,...のように[01-20]までテーブルが存在します。このテーブル名が一部一致している複数のテーブルを1つにまとめたいのですが、 どうクエリー文を書いたらいいでしょうか?(尚、列名は全て同じとする。)

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

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

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

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

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

takasima20

2020/06/09 01:45

手で書くなりプログラムで書くなりすることになると思うけど… もしかして JOIN の話?
guest

回答3

0

同じ構造のものであれば、unionを使用すれば、一つの集合として扱えます。
それを元にテーブルを作成するのが手っ取り早いと思います。

SQL

1create table テーブル名 as 2select * from foge_01_2020 3union all 4select * from foge_02_2020 5678union all 9select * from foge_20_2020

但し、分かれていたものを一つに纏めるというのは、テーブル名で分かれていた情報が無くなるという事ですから、識別を持たせる方が良いかと思います。

SQL

1create table テーブル名 as 2selec '01_2020' as 識別, * from foge_01_2020 3union all 4select '02_2020', * from foge_02_2020 5678union all 9select '20_2020', * from foge_20_2020

追記

質問が、複数のテーブルを一つにまとまったテーブルの様に参照したいという事あれば、
単なるunionクエリーで参照できます。

ただ纏めるテーブルが可変となるなら、unionを使用したSQLを動的に作成する必要があります。
質問のテーブルは水平分割されていて正規化されていない状態ですので、正規化すればそもそもunionなどを行う必要が無いものです。

投稿2020/06/09 01:52

編集2020/06/09 06:25
sazi

総合スコア25206

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

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

namonakiSE

2020/06/09 01:58

ありがとうございます。条件一致で一括取得は行い得ないのでしょうか?
namonakiSE

2020/06/09 01:59

もし件数が100とかになると凄い行数のクエリーになると思うのですが・・・
sazi

2020/06/09 03:38 編集

条件とは何でしょう? テーブル数は20個なのでしょう? 単にテーブルをマージしているだけですので、テーブル数分UNIONしているだけですし、この程度を手書きしてもそれほど手間ではないと思いますけど。
sazi

2020/06/09 03:35

因みに、行なおうとされているのは、正規化の為のデータメンテナンスだと思って回答しています。 これらは恒常的な処理だと思って回答はしていません。 なので、SQLも一度作ってしまえばいいだけのものと思って回答しています。
guest

0

おそらくSQLでテーブル名の指定をワイルドカードのように書けないか?
というご質問のようにお見受けしましたが、残念ながら標準的なSQL「だけ」ではそのような書き方はできないと思われます。

もし、そういう参照の仕方をする局面が多いなら、それらのテーブルをJOINするSQLを書いたビューを用意すると、あとあとの手間も少なくなるかと。

投稿2020/06/09 06:18

takasima20

総合スコア7460

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

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

0

DB名やTABLE名を柔軟に処理できるSQLはないでしょう
プロシージャで処理してください

投稿2020/06/09 03:09

yambejp

総合スコア115010

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

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

yambejp

2020/06/09 03:09

そもそも運用の仕方が悪いだけのような気がしますが・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問