當(dāng)前位置:首頁>職場>sql中兩張表聯(lián)合查詢(SQL與聯(lián)合函數(shù)完成多工作表查詢)
發(fā)布時間:2024-01-24閱讀(13)
【分享成果,隨喜正能量】 付出辛苦,總有收獲;布施善意,深入福澤,善多一分,福自然深一分。人生無懼,無論榮華富貴,還是低賤窮困,我們都要從容不迫,學(xué)會積極的看待人生,緣來了,則聚;緣去了,則散。。 ??
《VBA數(shù)據(jù)庫解決方案》教程是我推出的第二套教程,目前已經(jīng)是第一版修訂了。這套教程定位于中級,是學(xué)完字典后的另一個專題講解。數(shù)據(jù)庫是數(shù)據(jù)處理的利器,教程中詳細(xì)介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作,教程第一版的修訂內(nèi)容主要是完成所有程序文件的32位和64位OFFICE系統(tǒng)測試。
這套教程共兩冊,八十四講,今后一段時間會給大家陸續(xù)推出修訂后的教程內(nèi)容。今日的內(nèi)容是:SQL與聯(lián)合函數(shù)完成多工作表查詢

大家好,我們繼續(xù)VBA數(shù)據(jù)庫解決方案的學(xué)習(xí),今天講解第51講:利用聚合函數(shù)和SQL語句完成多工作表的匯總查詢計算。今日的內(nèi)容看似簡單,其實有些難度,希望大家不要放棄,在自己測試的時候要多測試幾次。雖然本講的內(nèi)容可利用其他的方法也可以實現(xiàn),但這種方法也不失為一種解決問題的有效手段。
在我的系列書籍中一直在強調(diào)“搭積木”的編程思路,主要的內(nèi)涵:首先是代碼不要自己全部的錄入,你要做的是把積木放在合適的位置讓后去修正代碼,其次是建立自己的“積木庫”,把自己認(rèn)為有用的代碼放在一起,可以隨時利用。你的積木庫資料越多,你做程序的思路就會越多。數(shù)據(jù)庫的代碼錄入更是如此,代碼往往很長,千萬不要自己去錄入。空格,引號,逗號的寫法要求是非常嚴(yán)格的。一定要拷貝,然后修正代碼,把時間利用到高效的思考上。
1 應(yīng)用場景的具體分析今日的內(nèi)容是講聚合函數(shù)和SQL的結(jié)合,從而完成我們的實際工作。如下的實例:我的工作表中有兩頁格式接近的數(shù)據(jù),如下:

現(xiàn)在我要把兩個工作表的數(shù)據(jù)提取型號,數(shù)量,單價,并把數(shù)量按型號匯總,匯總后的數(shù)據(jù)按型號排序處理。
上面的例子,如果在EXCEL工作表文件中處理要多個步驟來完成,用數(shù)據(jù)庫的一般方案也是比較麻煩的,下面看我們聯(lián)合函數(shù)的功效吧。
2 完成多工作表的匯總查詢計算的代碼及代碼解讀我給出的代碼如下;
Sub mynzRecords_51() 第51講 利用聯(lián)合函數(shù)和SQL語句完成多工作表的匯總查詢計算
Dim cnADO, rsADO As Object
Dim strPath, strSQL1, strSQL2, strSQL3, strSQL4 As String
Worksheets("51").Select
Cells.ClearContents
Set cnADO = CreateObject("ADODB.Connection")
Set rsADO = CreateObject("ADODB.Recordset")
建立一個ADO的連接
strPath = ThisWorkbook.FullName
cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties=excel 12.0;hdr=yes;imex=1;data source=" & strPath
strSQL1 = "select 型號,數(shù)量,單價 from [數(shù)據(jù)$]"
strSQL2 = "select 型號,數(shù)量,單價 from [數(shù)據(jù)2$]"
strSQL3 = strSQL1 & " UNION ALL " & strSQL2
strSQL4 = "select 型號,SUM(數(shù)量),單價 from (" & strSQL3 & ") GROUP BY 型號,單價"
arr = Array("型號", "數(shù)量", "單價")
[a1:c1] = arr
[a65536].End(xlUp).Offset(1, 0).CopyFromRecordset cnADO.Execute(strSQL4)
cnADO.Close
Set cnADO = Nothing
Set rsADO = Nothing
End Sub
代碼截圖:

代碼講解:
1 strSQL1 = "select 型號,數(shù)量,單價 from [數(shù)據(jù)$]" 第一個SQL語句完成“數(shù)據(jù)”工作表的數(shù)據(jù)提取。
2 strSQL2 = "select 型號,數(shù)量,單價 from [數(shù)據(jù)2$]" 第二個SQL語句完成“數(shù)據(jù)2”工作表的數(shù)據(jù)提取。
3 strSQL3 = strSQL1 & " UNION ALL " & strSQL2 第三個SQL語句完成strSQL1和strSQL2的組合,這里利用到了聯(lián)合函數(shù)UNION,此函數(shù)的用法大家要注意,按照我給出的代碼示例進行即可。
4 strSQL4 = "select 型號,SUM(數(shù)量),單價 from (" & strSQL3 & ") GROUP BY 型號,單價"
第四個SQL語句,通過上面的聚合函數(shù)建立一個新的SQL查詢。同樣這個語句的寫法要注意按照我的示例格式進行,不要另辟蹊徑,通不過的。
下面看我們代碼的運行結(jié)果:

今日內(nèi)容回向:
1 聚合函數(shù)在sql中如何應(yīng)用?
2 如何利用聯(lián)合函數(shù)完成數(shù)據(jù)的統(tǒng)計?
本講內(nèi)容參考程序文件:VBA與數(shù)據(jù)庫操作(第二冊).xlsm

我20多年的VBA實踐經(jīng)驗,全部濃縮在下面的各個教程中:



【分享成果,隨喜正能量】善良,像暗夜里的燈火,每付出一份善意,就亮起一盞燈火,懷善心,做善事,自會福報綿延。。
歡迎分享轉(zhuǎn)載→http://www.avcorse.com/read-228288.html
下一篇:紅娘是哪一部作品中的人物
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖