ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何根据数据透视表页字段的选择自动调整SQL语句?

如何根据数据透视表页字段的选择自动调整SQL语句?

作者:绿色风 分类: 时间:2022-08-17 浏览:73
楼主
amulee
Q:如何根据数据透视表页字段的选择自动调整SQL语句?
A:本例中,需要在数据透视表中实现区域排名和总排名。该排名可以通过 [SQL in Excel] 如何在数据透视表中用SQL实现区域排名和总排名? http://www.exceltip.net/thread-18463-1-1.html
该贴实现。
但数据透视表页字段中选择不同类型的店铺,该排名由于是事先生成的,因而没有变化。但可以通过透视表事件来更新SQL语句从而实现该排名随页字段的变化。

在工作表中添加以下代码:
  1. Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
  2.     Dim StrPageField As String
  3.     Dim strSql As String
  4.     StrPageField = Target.PageFields(1).CurrentPage.Caption
  5.     Select Case StrPageField
  6.         Case "(全部)"
  7.             strSql = "select a1.*,b1.区域排名,b1.总排名 from [3月1$A:H]a1 " & _
  8.                 "Left Join" & _
  9.                 "(select *," & _
  10.                 "(select count(*)+1 from " & _
  11.                 "(select 区域,门店名称,店铺类型,sum(金额) as 金额 from [3月1$] group by 区域,门店名称,店铺类型)a " & _
  12.                 "where a.区域=b.区域 and a.金额>b.金额) as 区域排名," & _
  13.                 "(select count(*)+1 from " & _
  14.                 "(select 区域,门店名称,店铺类型,sum(金额) as 金额 from [3月1$] group by 区域,门店名称,店铺类型)a where a.金额>b.金额) as 总排名 from " & _
  15.                 "(select 区域,门店名称,店铺类型,sum(金额) as 金额 from [3月1$] group by 区域,门店名称,店铺类型)b)b1 " & _
  16.                 "on a1.区域&"" - ""&a1.门店名称&"" - ""&a1.店铺类型=b1.区域&"" - ""&b1.门店名称&"" - ""&b1.店铺类型 " & _
  17.                 "where a1.区域 Is Not Null"
  18.         Case Else
  19.             strSql = "select a1.*,b1.区域排名,b1.总排名 from [3月1$A:H]a1 " & _
  20.                 "Left Join" & _
  21.                 "(select *," & _
  22.                 "(select count(*)+1 from " & _
  23.                 "(select 区域,门店名称,店铺类型,sum(金额) as 金额 from [3月1$] Where 类型='" & StrPageField & "' group by 区域,门店名称,店铺类型)a " & _
  24.                 "where a.区域=b.区域 and a.金额>b.金额) as 区域排名," & _
  25.                 "(select count(*)+1 from " & _
  26.                 "(select 区域,门店名称,店铺类型,sum(金额) as 金额 from [3月1$] Where 类型='" & StrPageField & "' group by 区域,门店名称,店铺类型)a where a.金额>b.金额) as 总排名 from " & _
  27.                 "(select 区域,门店名称,店铺类型,sum(金额) as 金额 from [3月1$] Where 类型='" & StrPageField & "' group by 区域,门店名称,店铺类型)b)b1 " & _
  28.                 "on a1.区域&"" - ""&a1.门店名称&"" - ""&a1.店铺类型=b1.区域&"" - ""&b1.门店名称&"" - ""&b1.店铺类型 " & _
  29.                 "where a1.区域 Is Not Null"
  30.     End Select
  31.     Application.EnableEvents = False
  32.     ThisWorkbook.PivotCaches(1).CommandText = strSql
  33.     ThisWorkbook.PivotCaches(1).Refresh
  34.     Application.EnableEvents = True
  35. End Sub




数据透视表事件.rar
2楼
水星钓鱼
这个不错,学习

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap