一、思路 (SELECT DISTINCT 出票人名称 FROM [明细$]) AS 基准列 从明细表中找出不重复的出票人名称作为基准列 (SELECT 出票人名称,SUM(票面金额) AS 年初金额,COUNT(票面金额) AS 年初笔数 FROM [明细$] WHERE YEAR(出票日)<2007 GROUP BY 出票人名称) AS 年初合计 从明细表中求出07年前按出票人名称分类汇总的票面金额合计及个数合计 将此合计按基准列排列,即可用下面的语句: "SELECT 基准列.出票人名称,年初金额,年初笔数 FROM (SELECT DISTINCT 出票人名称 FROM [明细$]) AS 基准列 " & _ "LEFT JOIN " & _ " (SELECT 出票人名称,SUM(票面金额) AS 年初金额,COUNT(票面金额) AS 年初笔数 FROM [明细$] WHERE YEAR(出票日)<2007 GROUP BY 出票人名称) AS 年初合计 " & _ "ON 基准列.出票人名称=年初合计.出票人名称" 其它要求的项目按以上形式继续在后面 LEFT JOIN 即可。 二、年初合计完整代码: Sub total() Set Cnn = CreateObject("ADODB.connection") Cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ActiveWorkbook.FullName Sql = "SELECT 基准列.出票人名称,年初金额,年初笔数 FROM (SELECT DISTINCT 出票人名称 FROM [明细$]) AS 基准列 " & _ "LEFT JOIN " & _ " (SELECT 出票人名称,SUM(票面金额) AS 年初金额,COUNT(票面金额) AS 年初笔数 FROM [明细$] WHERE YEAR(出票日)<2007 GROUP BY 出票人名称) AS 年初合计 " & _ "ON 基准列.出票人名称=年初合计.出票人名称" [A7].CopyFromRecordset Cnn.Execute(Sql) Cnn.Close: Set Cnn = Nothing End Sub
YDsoR5oi.rar
(14.66 KB, 下载次数: 28)
三、LEFT JOIN 语句使用其它示例: http://club.excelhome.net/viewthread.php?tid=160847&replyID=492286&skin=1 四、用ADO连接文件自身会出现的问题: http://club.excelhome.net/viewthread.php?tid=160847&replyID=698943&skin=1
[此贴子已经被作者于2007-2-1 10:00:25编辑过] |