如何在Crystal Report中从无关联的SQL数据库与MS Access表取数?
Crystal Reports 跨数据源Union操作与分组报表实现方案
一、直接在Crystal中创建Union查询(推荐)
Crystal支持通过自定义Command实现跨数据源Union,步骤如下:
- 打开数据库专家,先添加SQL数据库作为第一个数据源。
- 右键该数据源,选择Add Command,在弹出的SQL编辑器中编写Union语句,需确保两个数据源的字段数量、数据类型完全一致。
- 示例代码(含数据来源标识):
-- 从SQL数据库取数 SELECT TransID, TransDate, Amount, GroupCode, 'SQL_DB' AS DataSource FROM SQL_Transactions UNION ALL -- 从Access表取数(需指定Access文件完整路径) SELECT TransID, TransDate, Amount, GroupCode, 'Access_DB' AS DataSource FROM [C:\YourPath\YourAccessDB.accdb].Access_Transactions- 用
UNION ALL保留所有交易记录(含重复),若需去重改用UNION; - 新增
DataSource字段可快速区分数据来自SQL还是Access; - Access表路径若过长,可先配置ODBC数据源,直接用数据源名替代路径。
- 用
二、基于共通代码表的关联+Union方案
如果仍想使用你创建的共通代码表,可分别关联两边数据后再合并:
-- SQL数据关联共通代码表 SELECT t.TransID, t.TransDate, t.Amount, c.CommonCode, 'SQL_DB' AS DataSource FROM SQL_Transactions t INNER JOIN [C:\YourPath\YourAccessDB.accdb].CommonCodes c ON t.GroupCode = c.CommonCode UNION ALL -- Access数据关联共通代码表 SELECT t.TransID, t.TransDate, t.Amount, c.CommonCode, 'Access_DB' AS DataSource FROM [C:\YourPath\YourAccessDB.accdb].Access_Transactions t INNER JOIN [C:\YourPath\YourAccessDB.accdb].CommonCodes c ON t.GroupCode = c.CommonCode
- 注意:必须保证
GroupCode和CommonCode的字段类型、长度完全匹配,否则会出现关联失败或数据丢失。
三、报表分组设置
拿到Union后的数据集后,直接在Crystal中操作:
- 点击菜单栏Insert > Group,选择
GroupCode(或CommonCode)作为分组字段; - 若需统计分组交易金额,右键
Amount字段,选择Insert > Summary,设置汇总方式为求和,指定放置在组尾/组头即可。
内容的提问来源于stack exchange,提问作者Juguete
相关产品推荐
相关产品推荐

