建两个表,如下:
用户表
用户ID (自动编号)
用户名
抄表数表
抄表ID (自动编号)
用户ID
月份
抄表数
上月抄表数
本月用电量
新建一模块,在模块中粘贴如下代码:
Public Function TblName(ByVal intMonth As Long)
TblName = "抄表数表" & Format(intMonth, "00")
End Function
Public Function genTable(ByVal intMonth As Long)
Dim strSQL As String
strSQL = "SELECT u.用户ID, " & intMonth & " AS 月份, 0 AS 抄表数, m.抄表数 AS 上月抄表数, 0 AS 本月用电量 " & _
"INTO " & TblName(intMonth) & _
" FROM 用户表 AS u LEFT JOIN " & _
"(SELECT 用户ID, 抄表数 FROM 抄表数表 WHERE 月份=" & intMonth - 1 & ") AS m ON u.用户ID=m.用户ID;"
CurrentProject.Connection.Execute strSQL
End Function
Public Function megTable(ByVal intMonth As Long)
Dim strSQL As String
strSQL = "INSERT INTO 抄表数表 SELECT * FROM " & TblName(intMonth) & ";"
CurrentProject.Connection.Execute strSQL
End Function
CurrentProject.Connection.Execute "UPDATE 抄表数表 SET 本月用电量 = 抄表数 - 上月抄表数;"
End Function
TblName 函数:产生每个月抄表数据表的表名
genTable 函数:产生每个月抄表数据表,用以输入数据
megTable 函数:将每个月的抄表数据汇到"抄表数表"中
calTable 函数:计算每月用电量
这样,通过交叉查询,就可以得到你想要的数据表示方式了.
[em24]
例如, 得到你上面所说的数据,可作如下交叉查询:
TRANSFORM Sum(抄表数表.本月用电量) AS 本月用电量
SELECT 抄表数表.用户ID
FROM 抄表数表
GROUP BY 抄表数表.用户ID
PIVOT 抄表数表.月份;
[此贴子已经被作者于2003-6-24 16:42:23编辑过]
|