大家好,今日繼續講解VBA數據庫解決方案,今日講解的是第72講,内容是:轉置函數在查詢中的利用。數據處理的結果是要形成一個比較好看易懂的報表,如何能做出我們需要的格式,這就要我們靈活的運用所學到的知識,大膽的進行嘗試。今天講的是轉置函數,這個函數在數組中經常的用到,我們看看在數據庫中,這個函數是怎麼利用的 。
實例,如下的工作表中數據,我們要形成一個彙總的表格, 這個彙總的表格中含有姓名,和每個人的銷售總額,
同時我們要從數據中反饋出每個人每個月的銷售情況,也就是說還要把日期B列轉換為記錄集的字段進行彙總,如何實現這個功能呢?這就要用到轉置函數了.下面先看我的代碼,然後我會在講解中給大家講到.
Sub mynzRecords_72() '第72講 查詢後的彙總與轉置
Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Worksheets("72").Select
Cells.ClearContents
Set cnADO = CreateObject("ADODB.Connection")
Set rsADO = CreateObject("ADODB.Recordset")
strPath = ThisWorkbook.FullName
cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=yes;imex=1';" _
& "data source=" & strPath
'建立起一個轉置的查詢
strSQL = "TRANSFORM SUM(銷售額) SELECT 姓名,SUM(銷售額) AS 合計 " _
& "FROM [數據6$] GROUP BY 姓名 PIVOT FORMAT(日期,'mm月')"
'打開記錄集
rsADO.Open strSQL, cnADO, 1, 3
For i = 1 To rsADO.Fields.Count
Cells(1, i) = rsADO.Fields(i - 1).Name
Next
'提出數據
Range("a2").CopyFromRecordset rsADO
'釋放内存
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
End Sub
代碼截圖:
代碼講解:
1 上述代碼将完成一個轉置的查詢結果,将月份的值作為字段來進行分類。
2 strSQL = "TRANSFORM SUM(銷售額) SELECT 姓名,SUM(銷售額) AS 合計 " _
& "FROM [數據6$] GROUP BY 姓名 PIVOT FORMAT(日期,'mm月')"
這句的代碼是利用一個轉置函數TRANSFORM PIVOT的格式來實現我們的要求。
所謂轉置函數,即TRANSFORM...PIVOT... 語句,這是Microsoft JET Engine 3.5以上版本所特有的SQL查詢語句,該語句的特點是可以建立一個交叉表格式的查詢。該語句可以将表中的某些數據作為行,某些數據作為列建立交叉表。
該語句的語法如下:
TRANSFORM condition [select opreation] PIVOT column
特别注意點:
① TRANSFORM和Pivot後面都隻能有一個字段。
② condition是在交叉表中要顯示的數據,select opreation 是一個SELECT...FROM... 查詢,該查詢形成交叉表的行信息,PIVOT中column為表中的一個字段,PIVOT語句使用該字段形成交叉表的列。
③ 上面的格式用另外的表達方式為:Transfrom 數據區域 select 行字段 from (數據源) group by 分組依據 pivot 列字段
下面看代碼的運行結果:
今日内容回向:
1 轉置函數在什麼情況下應用?
2 轉置函數的語法是什麼樣的?
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!