Excel VBAを使用し、OleDBを使用してPGSQLに接続しています。残念ながら、oledbは、group byがテーブルに適用されている集計関数の外部のカラムへの参照を許可しないため、データを連結する必要がありますが、データ(latestBMI)を3つの別々のカラムに分割する際に問題がありますeventdate | weight | bmi)、重みとbmiの値は長さが異なりますが、パイプ区切り文字で除算されるためです。デリミタを使用してSQLデータを3列に分割
ここテーブルが抽出して次のようになります。
master_id : latestBMI
251 : 2008-05-08|84|26.8
2848 : 1992-11-23|86.71|27.3
2026 : 2002-04-16|105|31.6
22316 : 2014-02-28|107.955|35.1
16633 : 2005-07-04|70|25
9545 : 1997-04-08|82.73|24.9
私はSUBSTRING、CHARINDEX、LEN、LEFTしようと様々な方法で遊んでてきた| RIGHTを、しかし失敗します。ここ は私の現在のコードですが、体重とBMIのためのSUBSTRING要素は私の問題です:
私はパイプ区切り文字を使用して3つの別々の列にそれらを得るにはどうすればよい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 DATA As String DATA = "SELECT latest.master_id, " _ & "SUBSTRING(latestBMI,1,10) eventdate, " _ & "SUBSTRING(latestBMI,12,CHARINDEX('|',latestBMI,RIGHT(latestBMI,7)) weight, " _ & "SUBSTRING(latestBMI,20,4) BMI " _ & "FROM (" _ & "SELECT master_id, " _ & "MAX(CAST(eventdate AS VARCHAR(10)) + '|' + RIGHT(weightkg,7)+ '|' + RIGHT(bmi,4)) AS latestBMI " _ & "FROM weight " _ & "GROUP BY master_id) as latest " _ & "LEFT JOIN person p on latest.master_id = p.entity_id " Set rs = conn.Execute(DATA) With ActiveSheet.QueryTables.Add(Connection:=rs, Destination:=Range("A1")) .Refresh End With
?
いくつのレコードがありますか? – FLICKER
何千もの行のデータがある可能性があります – BradleyS
これをmysqlとsql-serverでタグ付けしましたが、あなたの質問ではpostgreを述べています。どのDBMSを実際に使用していますか? –