首页 > 解决方案 > VBA SQL Sum-group by 语句最多只占用两位十进制值

问题描述

我在 VBA 中遇到 SQL 语句问题。

我有一个数据集,其中有一列的值最多为小数点后 3 位,如下所示:

Name    Value  
---------------
A       0.004  
B       0.005  
A       0.123  
C       0.533

我想在 VBA 中编写一个 SQL 语句,根据Name总结Value

像这样:

sql = select name, sum(value) from data.csv group by name

现在我的问题是,当我进行求和时,excel 似乎最多只需要 2 位sum,这意味着 A 0.004 将是 0 而 A 0.123 将是 0.12。结果是我在求和过程中错过了一些价值:

我想要的结果是

A  0.127  (0.003 + 0.124)  
B  0.005  
C  0.533

但现在我得到了

A  0.12  (0 + 0.12)  
B  0  
C  0.53

在这种情况下我应该怎么做才能解决问题?

我试过 sum(cdbl(value)) 但它没有用。

太感谢了!

编辑:我的具体代码如下:

Sub Createnewfile()

Dim cn As ADODB.Connection, rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
Dim sql As String

FName = "\new file.xlsx"
FPath = ThisWorkbook.Path & FName

If Not Dir(FPath, vbDirectory) = vbNullString Then Kill FPath

Workbooks.Add
ActiveWorkbook.SaveAs Filename:=FPath
Set wsData = ActiveWorkbook.Sheets("Sheet1")

cn.Provider = "Microsoft.ACE.OLEDB.12.0"
cn.ConnectionString = "Data Source=" & ThisWorkbook.Path & ";" & "Extended Properties=""text;HDR=Yes;FMT=Delimited;"""
cn.Open

sql = "SELECT Name, sum(cbdl(value)) as value " & _
      "FROM data.csv " & _
      "GROUP BY Name "

rs.Open sql, cn
For c = 0 To rs.Fields.count - 1
    wsData.Cells(1, c + 1).Value = rs.Fields(c).Name
Next

rs.MoveFirst
r = wsData.UsedRange.Rows.count + 1
wsData.Cells(r, 1).CopyFromRecordset rs
rs.Close
cn.Close

Application.DisplayAlerts = False
With Workbooks("new file.xlsx")
    .Save
End With
End Sub

标签: sqlvbagroup-bysumdecimal

解决方案


推荐阅读