質問: SQL Server 2008での質問です。 (質問者はmysqlの知識しかありません 何かの日時データを一つのDBでずっとデータを入れ続けると 肥大化し重たくなるため、 また不要な範囲を集計時に読み込む必要のないよう 月ごとに別DBに分けて管理されているインスタンスがあるとします。(テーブル構成はすべて同じです) 例えば、2016年1月~3月までのhogeの集計がほしい場合 DBは 201601data 201602data 201603data とした場合 個別に取得してPGで処理はできるのですが、まとめて select sum(hoge) from 201601data,201602data,201603data のような感じで取る方法はないでしょうか? (mysqlの感覚だと、なぜDBがtableであるようにSQLを書いても動いてしまうのかよくわかっていません。
回答: こんにちは。 同一サーバ(インスタンス)内でデータベースを分けているのなら話は簡単で、テーブル名の指定方法にデータベース名(+所有者名)をつけてやる(「完全修飾テーブル名」とも呼ばれている命名法。上位側は省略可能(自サーバにアクセスするならサーバ名指定は不要))ことで可能です。(dboはよく使われる既定の所有者(スキーマ)名) ``` select sum(hoge) from ( select hoge from db1.dbo.201601data union select hoge from db2.dbo.201602data union select hoge from db3.dbo.201603data ) tbl ``` サーバ(インスタンス)も別なのでしたら、「リンクサーバー」機能を使用することが便利でしょう。