开发者社区 问答 正文

按项目描述对iReport表进行排序,但将相关的订单项保持在一起

我正在使用iReport从Fishbowl库存中编辑发票报告。当前,物料在此报告中按销售订单行号排序。项目按其产品编号从低到高输入到销售订单中。某些商品(并非全部)提供折扣,折扣显示在被折扣商品正下方的行号中,带有自己的行号。在报告的最后一项中,还将输入运输费用。该表如下所示:

例子

目前,我们的发票报告按行#排序,因此折扣显示在相应项目和运费的底部。但是,我们的客户要求按商品说明的字母顺序排列发票。

我能够使用iReport按项目描述对报告进行排序,并在SQL查询中编辑ORDER BY。问题在于,这会将所有折扣都放在“ d-”下,并将它们全部捆绑在一起,这意味着它们不再位于正确的订单项下。

目标:我需要找到一种按描述顺序按字母顺序对报告表进行排序的方法,但应保留折扣,并在底部保留正确的行和运费。

只需一些实际逻辑方面的帮助即可。我可以编辑实际的源查询,并且可以在iReport中弄乱Java /参数。必要时还可以提供XML源代码。

展开
收起
保持可爱mmm 2019-11-29 20:01:40 609 分享 版权
阿里云 AI 助理回答

要实现您的目标,您需要在SQL查询中采用一种策略来保持折扣与其对应商品的关联性,同时按商品描述进行排序。这可以通过在查询中创建一个临时排序字段来完成,该字段结合了商品描述和一个标识符,以区分原始行与折扣行,并确保它们一起排序。

以下是一个简化的示例,假设您的原始数据表名为invoice_items,包含item_description(商品描述), line_number(行号), discount(折扣标记, 假设为布尔值或字符串表示是否为折扣) 和其他相关列。请注意,您可能需要根据实际数据库结构调整此示例:

SELECT 
    item_description,
    line_number,
    discount,
    -- 创建一个排序字段,如果为折扣行,则附加特殊字符和行号,保证与原商品相邻
    CASE 
        WHEN discount THEN CONCAT('z-', line_number)  -- 将折扣行置于字母顺序后,但保持与原行关联
        ELSE item_description 
    END AS sort_key
FROM 
    invoice_items
ORDER BY 
    sort_key ASC, 
    line_number ASC;

这里的逻辑是: 1. 使用CASE语句创建一个sort_key字段,对于非折扣行,直接使用item_description作为排序依据;对于折扣行,前缀一个特殊的字符(如'z-'),这样所有折扣都会排在非折扣商品之后,但仍按照其原始行号的顺序排列。 2. 在ORDER BY子句中首先按sort_key排序,这会先按商品描述的字母顺序排序,然后将所有折扣行排在其对应的非折扣行之后。 3. 为了确保同一订单行内的折扣紧随其商品,我们还添加了对line_number的次要排序,这有助于维持原始行号的顺序,尤其是在有多个商品及其折扣的情况下。

请根据您的具体需求调整这个SQL查询,并在iReport中使用修改后的查询来生成报告。记得检查并测试结果,确保它符合客户的期望。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: