CSVファイルをADOで扱う連載の16回目です。前回の記事はこちらになります。
複数ファイルから読込む
前回は、ORDER BYを使った読込みデータの並べ替え方法をご紹介しました。読込みと並べ替えを一度にできると後の処理が便利です。
今までは1つのCSVファイルから読込んでいましたが、今回は複数のCSVファイルを色々な形で読込んでみようと思います。
今回もSQLを指定してCSVファイルを確認できるツール(CSV_ReaderSQL)を使います。ツールは以下からダウンロードしてください。
CSV_ReaderSQL110.zip - Google ドライブ
ファイルの統合
毎月のデータが記録されているファイルが月毎に複数あります。これらのファイルを1つにまとめて表示するにはどうしたらいいでしょうか?ファイルの内容は以下の様になっています。
1月のファイル(1月.csv)
"日付","価格" "2021/1/2","117" "2021/1/9","100" "2021/1/16","111" "2021/1/23","103" "2021/1/30","107"
2月のファイル(2月.csv)
"日付","価格" "2021/2/6","105" "2021/2/13","112" "2021/2/20","116" "2021/2/27","101"
任意のフォルダーの下に上の2つのファイルがあります。この内容を1つにまとめてみようと思います。ツールで任意のフォルダーを指定しておいて、SQLコマンド欄に以下を入力して実行ボタンを押してみてください。
SELECT * FROM [1月.csv] UNION ALL SELECT * FROM [2月.csv]
結果は以下の様になりました。
日付 | 価格 |
---|---|
2021/1/2 | 117 |
2021/1/9 | 100 |
2021/1/16 | 111 |
2021/1/23 | 103 |
2021/1/30 | 107 |
2021/2/6 | 105 |
2021/2/13 | 112 |
2021/2/20 | 116 |
2021/2/27 | 101 |
2つのファイルが1つにまとまりました。
UNION ALL
UNION ALLは、2つのテーブル(CSVファイル)を統合できます。また、2つ以上のテーブルを統合する事もできます。3つのファイルを統合する場合は、以下の様にSQL文を記述します。
SELECT * FROM [1月.csv] UNION ALL SELECT * FROM [2月.csv] UNION ALL SELECT * FROM [3月.csv]
UNION ALLで統合するテーブルの条件は以下になります。
- SELECTで指定する列のデータ型が同じか、変換可能である
- SELECTで指定する列数が同じ
ということは、異なる名前の列もデータ型があっていれば統合できるわけです。以下のSQL文を入力して実行してみましょう。(注:ここで扱っているのはCSVファイルで全データが文字列型です)
SELECT 日付 FROM [1月.csv] UNION ALL SELECT 価格 FROM [2月.csv]
結果は以下の様になりました。
日付 |
---|
2021/1/2 |
2021/1/9 |
2021/1/16 |
2021/1/23 |
2021/1/30 |
105 |
112 |
116 |
101 |
この様な使い方はまずないと思うのですが、異なる名前の列を統合できるということは覚えておいた方がいいと思います。
統合結果の並べ替え
統合した結果を指定の条件で並べ替えることもできます。前回ご紹介したORDER BYを使います。以下のSQLを入力して実行してみてください。
SELECT * FROM [1月.csv] UNION ALL SELECT * FROM [2月.csv] ORDER BY 価格 ASC
結果は以下の様になりました。
日付 | 価格 |
---|---|
2021/1/9 | 100 |
2021/2/27 | 101 |
2021/1/23 | 103 |
2021/2/6 | 105 |
2021/1/30 | 107 |
2021/1/16 | 111 |
2021/2/13 | 112 |
2021/2/20 | 116 |
2021/1/2 | 117 |
並べ替えを指示するORDER BYは、最後のSELECT文に付与してください。
次回も統合
いかがでしょうか。例にも示した通りUNION ALLは複数の記録ファイルをまとめたりするときに便利です。ところで、他にもUNIONなるものがあって、こちらもファイルの統合ができます。ただし、少しばかり動きが違うのです。次回はこちらをご紹介したいと思います。お楽しみに!!