ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 689|回复: 7

[求助] 按月汇总用SQL怎么写?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-3-6 13:42 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 Stone_00x 于 2023-3-6 15:54 编辑

要求:根据材料编号,分类,日期汇总数量1跟数量2 , 日期按月汇总,放在列里面

可以实现将数量1按月份汇总,但是同时将数量1&数量2按月份汇总不知道怎么改
  1.     strSQL = "TRANSFORM SUM(数量1) SELECT 材料编号,分类 FROM [数据源$" & sAdr & "]  " & _
  2.     "GROUP BY 材料编号,分类 PIVOT DATEPART('m',日期)&'月'"
复制代码


  1. Sub Pro()
  2.     Sheets("数据源").Select
  3.     sAdr = Range("a1").CurrentRegion.Address(0, 0)
  4.     Set cnn = CreateObject("ADODB.Connection")
  5.     Set rst = CreateObject("ADODB.Recordset")
  6.     cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=YES';Data Source=" & ActiveWorkbook.FullName
  7.    
  8.     strSQL = "TRANSFORM SUM(数量1) SELECT 材料编号,分类 FROM [数据源$" & sAdr & "]  " & _
  9.     "GROUP BY 材料编号,分类 PIVOT DATEPART('m',日期)&'月'"

  10.     rst.Open strSQL, cnn
  11.     Dim arrFileds
  12.     ReDim arrFileds(1 To 1, 1 To rst.Fields.Count)
  13.     For i = 1 To rst.Fields.Count
  14.         arrFileds(1, i) = rst.Fields(i - 1).Name
  15.     Next

  16.     Range("h1").CurrentRegion.ClearContents
  17.     Range("h1").Resize(1, rst.Fields.Count) = arrFileds
  18.     Range("h2").CopyFromRecordset rst
  19.     cnn.Close: Set cnn = Nothing

  20. End Sub
复制代码


screenshot.png

SQL求助.rar

5.36 KB, 下载次数: 8

TA的精华主题

TA的得分主题

发表于 2023-3-6 14:41 | 显示全部楼层
用数据透视表

TA的精华主题

TA的得分主题

发表于 2023-3-6 15:00 | 显示全部楼层
修改了数据源。看一下,有两种方法。第二种,可以用SQL直接生成透视表,我只不过分开做,让你看到结果。

SQL求助.rar

20.19 KB, 下载次数: 10

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-6 15:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

透视表是可以,我想学下用SQL怎么写

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-6 15:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
洋务德雷 发表于 2023-3-6 15:00
修改了数据源。看一下,有两种方法。第二种,可以用SQL直接生成透视表,我只不过分开做,让你看到结果。

附件没有代码,可以提供一下SQL代码吗,谢谢!

TA的精华主题

TA的得分主题

发表于 2023-3-6 15:24 | 显示全部楼层
了解一下SQL的 TRANSFORM

  1. rem ==============================================================================================  示例
  2. 'TRANSFORM 语句可分为以下几个部分:
  3. '部分                说明
  4. 'aggfunction        运算所选数据的 SQL合计函数,sum(数量),要在全部数据显示的内容
  5. 'selectstatement    SELECT 语句.  select 品类 FROM (" & StrSQL & ") group by 品类   和采用的函数相关
  6. 'PivotField         在查询结果集中用来创建列标题的字段或表达式?   pivot 月份,表示上面的标题
  7. 'value1,value2     用来创建列标题的固定值,注意:可以指定顺序。
  8. '
  9. ' SELECT 和 GROUP BY 字段是自上向下显示的字段
  10. ' PIVOT   和 ORDER BY  字段是自左向右显示的字段

  11. 'StrSQL2 = "TRANSFORM SUM(数量) SELECT 品类 FROM [" & sh1.Name & "$] GROUP BY 品类 Order By 月份 DESC PIVOT 月份"
  12. 'StrSQL2 = "TRANSFORM SUM(数量) SELECT 品类,分类 FROM [" & sh1.Name & "$] GROUP BY 品类,分类 PIVOT 月份"
  13. 'StrSQL2 = "TRANSFORM SUM(数量) SELECT 品类,SUM(数量) AS 合计 FROM [" & sh1.Name & "$] GROUP BY 品类 PIVOT 分类 IN (A,C)"

  14. 'sqlB = "TRANSFORM sum(余额)  SELECT  部门  from [Sheet1$" & sAddress & "] group by 部门  PIVOT 类型 in (公司存款, 对私存款, 贷款)"
  15. 'strSQL = "transform count(岗位) select 部门 from [车间$C3:D12] group by 部门 pivot 岗位 in (巡检,机修,电工)"
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-3-6 21:17 | 显示全部楼层
Stone_00x 发表于 2023-3-6 15:08
附件没有代码,可以提供一下SQL代码吗,谢谢!

这是SQL代码。并不在vba编辑界面。鼠标点击表内任意一个单元格,右键菜单--点击编辑查询。出现窗体有代码。不会,可以加好友V 我的个人信息,或者回复栏下方都有。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-7 11:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
opiona 发表于 2023-3-6 15:24
了解一下SQL的 TRANSFORM

可以实现将数量1按月份汇总,但是同时将数量1&数量2按月份汇总该怎么写呢?

  1. Sub Pro()
  2.     Sheets("数据源").Select
  3.     sAdr = Range("a1").CurrentRegion.Address(0, 0)
  4.     Set cnn = CreateObject("ADODB.Connection")
  5.     Set rst = CreateObject("ADODB.Recordset")
  6.     cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=YES';Data Source=" & ActiveWorkbook.FullName
  7.    
  8.     strSQL = "TRANSFORM SUM(数量1) SELECT 材料编号,分类 FROM [数据源$" & sAdr & "]  " & _
  9.     "GROUP BY 材料编号,分类 PIVOT DATEPART('m',日期)&'月'"

  10.     rst.Open strSQL, cnn
  11.     Dim arrFileds
  12.     ReDim arrFileds(1 To 1, 1 To rst.Fields.Count)
  13.     For i = 1 To rst.Fields.Count
  14.         arrFileds(1, i) = rst.Fields(i - 1).Name
  15.     Next

  16.     Range("h1").CurrentRegion.ClearContents
  17.     Range("h1").Resize(1, rst.Fields.Count) = arrFileds
  18.     Range("h2").CopyFromRecordset rst
  19.     cnn.Close: Set cnn = Nothing

  20. End Sub
复制代码

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 17:20 , Processed in 0.049154 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表