2016-04-03 6 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

2番目のクエリに追加派生テーブルとして最初のクエリを追加することを検討して:

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

これは素晴らしいですありがとうございました。しかし、私は実行時エラー "table" h "のFROM-clauseエントリが見つからずに残っています; SQLSTATE 42P01 – BradleyS

+0

これはあなたのコードから今ではうまくいきましたので、どうもありがとうございます。 so much much – BradleyS

+0

面白い、h参照は、テーブルエイリアスに必要な 'AS h'によるかもしれませんが、p参照は失敗しませんでした。 – Parfait