You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:57:31