【问题标题】:How to pull required data from table the way Crystal is pulling it?如何以 Crystal 拉取数据的方式从表中提取所需数据?
【发布时间】:2014-03-01 19:14:55
【问题描述】:

我有一个如下表所示的视图,它使用 JOINS 从多个其他表中提取数据。基本上我正在尝试复制一个水晶报表,它将下面的数据分解为 Job # - Weekly (hrs) - TotalToDate(hrs) - Budget(hrs)

这是按部门划分的。报告的方式是显示上周的小时数,然后是迄今为止的总小时数,然后是为该部门设置的预算小时数。

表并没有反映在上面 - 只是 DB 表的一个示例。

    +-----------+------------+---------------+--------+---------------------+
    | Job       |  Work_Date | Work_Center   | Est_Total_Hrs | Act_Run_Hrs  |
    +-----------+------------+---------------+--------+------+--------------+
    |      5666 | 2014-02-23 | SURFACE       |     155       |      5       | 
    |      5666 | 2014-02-16 | SURFACE       |     155       |      3       |      
    |      5666 | 2014-02-23 | DESIGN        |     200       |      6       |      
    |      5666 | 2014-02-16 | DESIGN        |     200       |      4       |       
    |      5666 | 2014-02-23 | SURFACE       |     150       |      2       |      
    |      5666 | 2014-02-16 | SURFACE       |     150       |      2       |       
    |      5666 | 2014-02-23 | DESIGN        |     300       |      8       |       
    +-----------+------------+---------------+---------------+--------------+

此外,还有很多不同的工作编号,当我在 Crystal 中提取超过 1 个工作时,它会显示如上图所示的报告,但包含我要检索的所有工作。

我将如何提取这些数据以使其在 Crystal Report 中以相同的方式显示?我想创建一个看起来相同的视图。有没有办法看看水晶是如何做到的?当我单击“显示查询”时,它会向我显示以下查询,我必须重新编写它以使其在 SQL Server 和 Adminer 中工作。

我用来提取过去 90 天内更新的 Work_Date 内所有作业的所有数据的查询。

SELECT Job_Operation.Work_Center
    ,Job_Operation.Job_Operation
    ,Job_Operation_Time.Work_Date
    ,Job_Operation.Est_Total_Hrs
    ,Job_Operation_Time.Act_Run_Hrs
    ,Job_Operation_Time.Act_Setup_Hrs
    ,Job.Description
    ,Job_Operation_Time.Overtime_Hrs
    ,Job_Operation_Time.Act_Setup_Hrs
    ,Job.Job
    ,Job.Description
    ,Job_Operation_Time.Labor_Burden
    ,Job_Operation.Est_Setup_Labor
    ,Job_Operation.Est_Run_Labor
    ,Job_Operation.Est_Labor_Burden
    ,Job_Operation.Operation_Service
FROM Job AS Job 
LEFT OUTER JOIN Job_Operation AS Job_Operation ON Job.Job = Job_Operation.Job
LEFT OUTER JOIN Job_Operation_Time AS Job_Operation_Time ON Job_Operation.Job_Operation = Job_Operation_Time.Job_Operation
WHERE DATEDIFF(day, Work_Date, GETDATE()) < 90 ORDER BY Work_Date Desc

【问题讨论】:

    标签: mysql sql crystal-reports


    【解决方案1】:

    Crystal 将从查询中获取数据并根据报表的设计进行内部操作,因此,如果您需要与查看报表时完全相同的表格,那么您需要在 Crystal 报表中连同查询一起进行一些更改.

    建议:

    1. 您的报告只有 6 列,但您查询的列超过 10 列,因此您需要更改查询,使其只有 6 列。

    2. 报表有周数据,但查询有小时数据,所以你需要在查询中编写一些函数,以便你设法从小时数据中获取周数据

    3. 您说过,当您以给定格式获取超过1 ID 时,在这种情况下,将一些group by 条件添加到结果查询中,以便对所有数据进行分组。例如,如果您只需要一个 ID,则按 ID 分组,这样一个 ID 只有一条记录。

    4. 尝试添加一些group by条件一些日期公式以获得准确的输出

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多