備忘録:EXCEL VBA:MySQLデータベースから集計表を作表するクエリーSQL

MySQLデータベースは、単にデータを保管しているだけではなく、データを集計して表示させることもできます。
あるデータベースのテーブルにおいて、複数の数値項目を足し込んで集計するケースをメモしておきます。

t_aaaaというテーブルに存在するt_cd1とt_cd2という2つの項目で集計しています。
集計する項目はグループ化をします。集計項目が複数の場合はカンマで続けます。(group by)
集計する数値はsuji1からsuji4まで。集計した結果は、totalという名前で指定します。(as total)
集計結果は、Activateしたt_data_sheetというシートに貼り付けられます。場所は、シートのA1です。
(Destination:=Range("$A$1"))

Sub total()

Dim cn1 As ADODB.Recordset
Set cn1 = New ADODB.Recordset
Dim cntrl As String
Dim sql As String

cntrl = ”dsn=ODBCの名前;uid=データベースのID;pwd=データベースのパスワード”

sql = "SELECT t_cd1,t_cd2,sum(suji1) + sum(suji2) + sum(suji3) + sum(suji4) as total from t_drm where t_nendo = '2017' group by t_cd1,t_cd2;"

Worksheets("t_data_sheet").Activate

With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
"ODBC;DATABASE=データベース名;DESCRIPTION=MySQL;DSN=ODBCの名前;OPTION=0;;PORT=ポート(通常は3306);SERVER=サーバ名(IPアドレスでもよい);SOCKET=/var/lib/mysql/mysql.sock;U" _
), Array("ID=データベースのID;CHARSET=sjis")), Destination:=Range("$A$1")).QueryTable
.CommandText = sql
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshOnFileOpen = False
.BackgroundQuery = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = False
.ListObject.DisplayName = "t_aaaa"
.Refresh BackgroundQuery:=False
End With
End Sub