摘要:strSQL = "Select a.項目,a.總人數,a.總價格,b.出動車輛,b.工具總套數,b.工具總價格 From (" _。4 strSQL = "Select a.項目,a.總人數,a.總價格,b.出動車輛,b.工具總套數,b.工具總價格 From (" _。

大家好,今日繼續講解VBA數據庫解決方案,今日的內容是第67講:內連接INNER如何在兩個不同的SQL中建立連接。今日的內容是之前內容的延伸,在前面的講解中我講了利用INNER連接的兩個數據源都是字段值與值的條件匹配,如果字段不是唯一值時數據會報錯。如何理解這個問題呢?所謂連接,目的是查詢,找出條件相同值的匹配,對於一對多,或者多對一的匹配,在內連接中是無法建立起對應關係的,多對一,或者一對多如何連接,不是我們關心的,我們關心的是如何把多值查詢變成值的唯一查詢,也就是說在連接前,要建立一個值的排重處理,這個排重處理我們在工作表中可以用數據透視表來完成,在此我們採用的方案是SQL語句。

我們還是以實例來詳細講解,實例,某策劃公司團隊中有兩個負責部門對於策劃項目的報價,在外聯部門報價是:

在每個項目中由若干個類別組成,每個類別需要的人數和價格如上,同時後勤部門的報價如下:

報價中含有對每個項目組成類別的佔用車輛及需要的工具套數和單價。

當收到上述兩個部門報價後,我們要根據內容整理出總的報價,總報價中不必關心其中小類別的報價,只要彙總即可。我們要得出的只是項目,總人數,總價格,出動車輛,工具總套數,工具總價格等字段彙總,這個時候該如何處理呢?

思路:對於兩個數據表先分別進行數據的彙總,然後再用內連接同時連接這兩個彙總的數據,就可以得到我們的最終結果了。當然,思路很好建立,如何實現呢?

我們先看下面我給出的代碼:

Sub mynzRecords_67() '第67講 內連接Inner join 連接兩個SQL

Dim cnADO, rsADO As Object

Dim strPath, strSQL As String

Worksheets("67").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

strSQL1 = "select 項目,SUM(人數) AS 總人數,SUM(價格) AS 總價格 from [數據4$] group by 項目"

strSQL2 = "select 項目,SUM(車輛) AS 出動車輛,SUM(工具套數) AS 工具總套數,SUM(工具套數*工具單價) AS " _

& "工具總價格 from [數據5$] group by 項目"

strSQL = "Select a.項目,a.總人數,a.總價格,b.出動車輛,b.工具總套數,b.工具總價格 From (" _

& strSQL1 & ") a Inner Join (" & strSQL2 & ") b " _

& "ON a.項目=b.項目 GROUP BY a.項目,a.總人數,a.總價格,b.出動車輛,b.工具總套數,b.工具總價格"

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 上述代碼先用SQL1 和SQL2 對"數據4" 工作表和"數據5"工作表進行數據的彙總。建立項目的彙總數據。

2 strSQL1 = "select 項目,SUM(人數) AS 總人數,SUM(價格) AS 總價格 from [數據4$] group by 項目"

上述SQL語句實現的的是對工作表4的彙總,上面有新的字段的設置。

3 strSQL2 = "select 項目,SUM(車輛) AS 出動車輛,SUM(工具套數) AS 工具總套數,SUM(工具套數*工具單價) AS " _

& "工具總價格 from [數據5$] group by 項目"

上述SQL語句實現的的是對工作表5的彙總,上面也有新的字段的設置。

4 strSQL = "Select a.項目,a.總人數,a.總價格,b.出動車輛,b.工具總套數,b.工具總價格 From (" _

& strSQL1 & ") a Inner Join (" & strSQL2 & ") b " _

& "ON a.項目=b.項目 GROUP BY a.項目,a.總人數,a.總價格,b.出動車輛,b.工具總套數,b.工具總價格"

利用上述的SQL語句,實現了對SQL1和SQL2的內連接,條件是a.項目=b.項目。

上述語句應用非常的方便,但我仍是反覆的提醒大家注意,儘可能不要自己去寫代碼,我提倡的是搭積木的思想,建立起自己的代碼庫,用的時候,可以方便的利用即可。

下面看本實例的運行情況:

這樣就給出了,三個項目的報價清單。

今日內容迴向:

1 如何建立連接於兩個SQL的內間接查詢?

2 應用於連接於兩個SQL的內間接查詢是什麼樣的實際場景?

相關文章