2016-04-03 51 views
0

我正在使用Excel VBA並使用OleDB連接到PGSQL。我有2行SQL代碼可以獨立運行,但我現在需要合併它們。 的第一個查詢是查找我需要第二次查詢SQL JOIN主組到結果組

Const sqlconnection = "Provider=oledb;" 

Dim conn As New Connection 
conn.ConnectionString = sqlconnection 
conn.Open 
Dim rs As Recordset 

Sheets("Sheet1").Select 
Range("A1").Select 

Dim GRP As String 
GRP = "SELECT h.master_id, p.surname, p.forename1, h.eventdate, h.code " _ 
& "FROM hist h INNER JOIN person p ON h.master_id=p.entity_id " _ 
& "AND code LIKE 'C10%' " _ 
& "ORDER BY h.master_id " 

第二屆查詢需要的基礎上才發現人的第一組,顯示效果人民主體組。

Dim DATA As String 
DATA = "SELECT latest.master_id, p.surname, p.forename1, " _ 
& "SUBSTRING(latestAP,1,10) eventdate, " _ 
& "SUBSTRING(latestAP,12,3) TX1, " _ 
& "SUBSTRING(latestAP,16,3) TX2 " _ 
& "FROM (" _ 
& "SELECT master_id, " _ 
& "MAX(CAST(eventdate AS VARCHAR(10)) + '.' + RIGHT('00' + TEXT1,3)+ '.' + RIGHT('00' + TEXT2,3)) as latestAP " _ 
& "FROM ap " _ 
& "GROUP BY master_id) AS latest " _ 
& "LEFT JOIN person p ON latest.master_id = p.entity_id " _ 
& "ORDER BY master_id " 

Set rs = conn.Execute(DATA) 
With ActiveSheet.QueryTables.Add(Connection:=rs, Destination:=Range("A1")) 
    .Refresh 
End With 

rs.Close 

回答

0

考慮加入第一個查詢作爲附加派生表到第二個查詢:

Dim DATA As String 
DATA = "SELECT latest.master_id, p.surname, p.forename1, " _ 
    & "  SUBSTRING(latestAP,1,10) eventdate, " _ 
    & "  SUBSTRING(latestAP,12,3) TX1, " _ 
    & "  SUBSTRING(latestAP,16,3) TX2 " _ 
    & "FROM (" _ 
    & "  SELECT master_id, " _ 
    & "    MAX(CAST(eventdate AS VARCHAR(10)) + '.' + " _ 
    & "     RIGHT('00' + TEXT1,3) + '.' + " _ 
    & "     RIGHT('00' + TEXT2,3)) as latestAP " _ 
    & "  FROM ap " _ 
    & "  GROUP BY master_id) AS latest " _ 
    & "INNER JOIN (" _ 
    & "  SELECT h.master_id, p.surname, p.forename1, "_ 
    & "    h.eventdate, h.code " _ 
    & "  FROM hist h " _ 
    & "  INNER JOIN person p ON h.master_id=p.entity_id " _ 
    & "  AND code LIKE 'C10%') AS grp " 
    & "ON grp.master_id = latest.master_id" 
    & "LEFT JOIN person p ON latest.master_id = p.entity_id " _ 
    & "ORDER BY master_id " 
+0

這是美妙謝謝。然而,我不斷收到一個運行時錯誤「缺少表」h「的FROM-clause條目; SQLSTATE 42P01 – BradleyS

+0

我現在從你的代碼中得到了這個工作,所以非常感謝你,我刪除了h。引用,它工作得很好。太多了 – BradleyS

+0

很好聽!有趣的是,h引用可能是由於需要'AS h'作爲表別名,但是p引用沒有失敗。 – Parfait