我正在使用iReport从Fishbowl库存中编辑发票报告。当前,物料在此报告中按销售订单行号排序。项目按其产品编号从低到高输入到销售订单中。某些商品(并非全部)提供折扣,折扣显示在被折扣商品正下方的行号中,带有自己的行号。在报告的最后一项中,还将输入运输费用。该表如下所示:
例子
目前,我们的发票报告按行#排序,因此折扣显示在相应项目和运费的底部。但是,我们的客户要求按商品说明的字母顺序排列发票。
我能够使用iReport按项目描述对报告进行排序,并在SQL查询中编辑ORDER BY。问题在于,这会将所有折扣都放在“ d-”下,并将它们全部捆绑在一起,这意味着它们不再位于正确的订单项下。
目标:我需要找到一种按描述顺序按字母顺序对报告表进行排序的方法,但应保留折扣,并在底部保留正确的行和运费。
只需一些实际逻辑方面的帮助即可。我可以编辑实际的源查询,并且可以在iReport中弄乱Java /参数。必要时还可以提供XML源代码。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
要实现您的目标,您需要在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中使用修改后的查询来生成报告。记得检查并测试结果,确保它符合客户的期望。