sql - 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
解决方案
推荐阅读
- c++ - 带有重叠的 WriteFile 偶尔会给我 ERROR_INVALID_HANDLE。我做 memset 正确吗?
- java - 如何在java中删除整数部分?
- mysql - 查询 IN 语句
- vue.js - 多个 Vue 应用程序,多个入口文件,相同的 Vuex/Vue3CompostitionApi 存储 [失去反应性]
- sql - 在 JOINS 和 WHERE 子句遇到问题的 SQL 语句方面需要帮助
- amazon-web-services - Redash 容器在 Fargate 的“worker”上损坏
- javascript - vue.js 反应性和数据与 mixin
- task - Chainlink Hackathon 21 HardHat教程在智能合约中执行函数
- android - RecyclerView billingClient:没有附加适配器;跳过布局,有时有效,有时无效
- c - 当我有足够的空间并且数组中没有太多数据时,为什么我在 C 中出现运行时 #2 失败