如何从Crystal中拉出所需的数据?

时间:2014-02-28 15:30:30

标签: mysql sql crystal-reports

我有一个类似下表的视图设置,它使用JOINS从多个其他表中提取数据。基本上我试图复制一份Crystal Report,将下面的数据分解为Job# - Weekly(小时) - TotalToDate(小时) - 预算(小时)

每个部门都会分手。报告的方式是显示上周的小时数,然后显示迄今为止的总小时数,然后是该部门的预算小时数。 Picture for reference

表格并未反映上述内容 - 只是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中以相同的方式显示?我想创建一个看起来相同的视图。有没有办法看看Crystal是如何做到的?当我点击"显示查询"它向我展示了下面的查询,我必须重新编写一下它才能在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

1 个答案:

答案 0 :(得分:1)

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

建议:

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

  2. 报告包含根据周的数据,但查询包含每小时数据,因此您需要在查询中编写一些函数,以便您设法从小时数据中获取每周数据

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

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