sql 문법중 Pivot 함수를 이용하여 월별 매출을 출력하는 구문을 만들어보자
sql 구문은 정규식의 패턴을 형성하는 것과 같기에 정확한 sql 문법을 찾아내는게 가장 중요하다
sql 구문의 집계함수들은 SELECT 함수보다 먼저 와야 한다.
또한 TRANSFORM과 PIVOT함수는 같이 페어링 된다.
https://stackoverflow.com/questions/16691853/transform-and-pivot-in-access-2013-sql
구문해석은 이렇다.
박스오피스 시트에 있는 영화명을 그룹으로 묶어서 매출액의 합계를 내는데 개봉일의 월별 계산을 위해
피벗함수를 사용해라...
이걸 피벗함수를 사용하지 않는다면 코드가 많이 복잡해 질것이다. SQL문으로 단 한줄로 끝나기에 당연히 공부를 해야하는 코드이다.
더보기
Option Explicit
Sub Haja_Guid_Pivot()
Dim StrGuid$: StrGuid = "{B691E011-1797-432E-907A-4D8C69339129}" '= ADODB참조
On Error Resume Next
ThisWorkbook.VBProject.References.AddFromGuid StrGuid, 0, 0 '= 가장 최신버전
On Error GoTo 0
Call Haja_Adodb_Pivot
End Sub
Sub Haja_Adodb_Pivot()
Dim Rs As New ADODB.Recordset
Dim strPath$
Dim strSQL$, strConn$
Dim strYear&
Dim i&
strPath = ThisWorkbook.FullName
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & strPath & ";" & _
"Extended Properties=Excel 12.0;"
strYear = Sheets("박스오피스").[m2] '= 변경하는 년도 값
strSQL = " TRANSFORM SUM(매출액) " & _
" SELECT 영화명 " & _
" FROM [박스오피스$] " & _
" WHERE mid(right(영화명,5),1,4) = " & strYear & _
" GROUP BY 영화명 " & _
" PIVOT FORMAT(개봉일 ,'mm') & '월' "
Rs.Open strSQL, strConn
With Sheets("연도별")
.Cells.Clear
For i = 0 To Rs.Fields.Count - 1
.Cells(1, i + 1) = Rs.Fields(i).Name
Next i
If Rs.EOF Then
MsgBox "조건에 맞는 데이터가 없습니다."
Rs.Close
Set Rs = Nothing
Exit Sub
Else
.[a2].CopyFromRecordset Rs
End If
With .UsedRange
.NumberFormat = "#,##0"
Sheets("박스오피스").[a1].Copy
Range(Sheets("연도별").[a1], Sheets("연도별").[a1].End(2)).PasteSpecial Paste:=xlPasteFormats
Sheets("연도별").[a1].CurrentRegion.Borders.LineStyle = 1
.Font.Size = 9
.Columns.AutoFit
Sheets("연도별").Activate
End With
End With
Rs.Close
Set Rs = Nothing
End Sub
'ADO' 카테고리의 다른 글
[ADO] 구글 주소록 한글 깨짐을 해결하자 (0) | 2023.02.17 |
---|---|
[ADO] 개봉된 영화 중 분기별 매출과 개봉 영화수를 구해보자 (0) | 2022.06.02 |
[ADO] mySql에 연결하여 데이터 가져오기 (0) | 2022.06.01 |
Early binding 이제 자동으로..(Feat.Guid) (0) | 2022.05.03 |
댓글