【问题标题】:SQL Statement; Help Writing Command for Crystal ReportsSQL 语句;帮助 Crystal Reports 编写命令
【发布时间】:2015-01-22 05:09:59
【问题描述】:

我已经使用 Crystal Reports 几年了,但直到现在我一直避免使用“添加命令”。

我有一份生成订单确认的报告。我想安排在特定时间间隔打印确认信息,但为了做到这一点,我需要最后一次修改订单的日期/时间。该信息可以在审计表中找到,但是,审计表可以包含同一订单的多个副本,具体取决于它被修改的次数。我不能直接加入这个审计表,因为它在我的订单确认中创建了重复的行,虽然我可以从子报表中的审计表中收集所需的信息,但我无法过滤这些结果的主报告。

我想获取审计表,并且只带入每个订单的最新记录,以便我可以过滤编辑日期和时间。

任何人都可以帮助编写此声明吗?

这是我目前所拥有的:

SELECT "OEP40A"."ORDN40", "OEP40A"."ADAT40", "OEP40A"."ATIM40", "OEP40A"."APRG40", "OEP40A"."ARCT40"
 FROM   "S103EC55"."OSLD1F3"."OEP40A" "OEP40A"
 WHERE  "OEP40A"."ARCT40"='2' AND "OEP40A"."APRG40"='OE340'
 ORDER BY "OEP40A"."ORDN40", "OEP40A"."ADAT40" DESC, "OEP40A"."ATIM40" DESC

订单号为 OEP40A.ORDN40。我遇到的问题之一是日期(OEP40A.ADAT40)和时间(OEP40A.ATIM40)是单独的字段。当这些字段分开时,如何选择具有最大日期和时间的记录?上面的语句是否会通过始终先按日期排序,然后按时间排序来实现?

编辑添加:

我的服务器是运行 V5R4 的 IBM iSeries。这是我想出的解决方案,以防其他人需要它。

SELECT ROW_NUMBER() over (osld1f3.oep40a.ordn40 分区顺序 osld1f3.oep40a.adat40, osld1f3.oep40a.atim40 desc) 作为 COUNT, osld1f3.oep40a.cono40, osld1f3.oep40a.adat40, osld1f3.oep40a。 ordn40, osld1f3.oep40a.atim40

来自 osld1f3.oep40a

WHERE osld1f3.oep40a.arct40=2 and osld1f3.oep40a.aprg40='OE340' and osld1f3.oep40a.actf40'X'

【问题讨论】:

    标签: sql crystal-reports command iseries-navigator


    【解决方案1】:
    1. 为了获得最大的帮助机会,您应该为相关表提供创建表脚本。

    2. 顺便说一句,由于您使用的是命令方法,因此请先让您的查询在目标数据库(Oracle、SQL Server)中完美运行,然后再在 Crystal 中运行命令(如果可以的话)。这种方式更容易调试。

    3. 关于获取最新记录,如果您的表使用顺序主键,您可以使用这样的子查询:

    select z.claim_id, z.ASSIGN_ID from (select c.claim_id , (select max(key_id) from audit_table ca where ca.fk_Id = c.fk_id) ASSIGN_ID from primary_table c) Z

    【讨论】:

    • 感谢您的建议,道格拉斯。我最初应该提供更多信息,但你的帖子确实为我指明了正确的方向。我将在上面为遇到类似问题的其他人发布我的最终解决方案。
    【解决方案2】:

    据我所知,通过查看您的问题,您无需编写命令即可获得所需的结果。

    尝试以下流程:

    1. 首先使用DateTimeValue (date, time)DateTime 创建一个datetime。检查以下链接

    http://www-01.ibm.com/support/knowledgecenter/SS4JCV_7.5.5/com.businessobjects.integration.eclipse.designer.doc/html/topic664.html

    1. 现在创建一个带有订单号的组,并将创建的Datetime 值详细放置。

    由此,您可以在该订单组的详细信息中获得不同的日期时间记录。

    1. 取消详细信息并通过右键单击日期时间字段来获取最大的日期时间,这将为您提供最近发生的事件。

    2. 在做所有这些事情之前,使用数据库专家中的订单号链接表。

    【讨论】:

    • 感谢您的建议,但我认为在这种情况下这对我不起作用。如果我直接在 Database Expert 中链接表,我将获得订单上每个行项目的重复记录,等于订单被修改的次数。我需要从 OEP40A 中选择最新的记录,然后才能链接到 Crystal Reports 中的订单确认。
    • 获取最新记录我们使用最大函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    相关资源
    最近更新 更多