在HANACrystalReports中带参数的计算查询。

问题描述 投票:1回答:1

我想解释我的必要性有困难,所以我描述一下场景。


场景是这样的

  • A产品一次最大产量为125KG。
  • 操作员接到一个A产品的生产订单,产量为1027,5KG。
  • 操作员需要计算他需要生产多少发子弹,并调整每发子弹的零部件数量。

我们想创建一个报表,在这个报表中,这种计算已经完成了,根据这个方案的数值,我们认为第一步应该是返回这样的内容。

ROUND QUANTITY(KG) 1 125 2 125 3 125 4 125 5 125 6 125 7 125 8 125 9 27,5 .

之后,通过简单的操作就可以完成组件的重新计算。


问题是,我们想不出获得所需回报的方法,也想不出实现上述报告的不同方法。

我们能做的就是得到除法的整数部分。

SELECT FLOOR(1027.5/125) AS "TEST" FROM DUMMY

其余

SELECT MOD(1027.5,125) AS "TEST" FROM DUMMY

我们正在使用。

  • SAP HANA SQL
  • 水晶报告
  • SAP B1

不胜感激

先谢谢你了!

sql crystal-reports sap hana sapb1
1个回答
1
投票

有几种方法可以实现你描述的想要。

一种方法是将需求转化为一个函数,将两个输入参数值,返回生产轮次表。

这个函数可以是这样的。

create or replace  function production_rounds(
            IN max_production_volume_per_round decimal (10, 2)
          , IN production_order_volume         decimal (10, 2)
          )
returns table   (
          production_round integer
        , production_volume decimal (10, 2))
as
begin
declare rounds_to_produce integer;
declare remainder_production_volume decimal (10, 2);

    rounds_to_produce := floor( :production_order_volume / :max_production_volume_per_round);
    remainder_production_volume := mod(:production_order_volume, :max_production_volume_per_round);

    return 
        select /* generate rows for all "max" rounds */
                 s.element_number                   as production_round
               , :max_production_volume_per_round   as production_volume
        from
            series_generate_integer
                (1, 1, :rounds_to_produce + 1) s
    UNION ALL
        select /* generate a row for the final row with the remainder */
                :rounds_to_produce + 1              as production_round
              , :remainder_production_volume        as production_volume
        from
            dummy
        where 
            :remainder_production_volume > 0.0;

end;

你可以像使用任何表格一样使用这个函数 -- 但要有参数。

select * from production_rounds (125 , 1027.5) ;

PRODUCTION_ROUND    PRODUCTION_VOLUME
1                   125              
2                   125              
3                   125              
4                   125              
5                   125              
6                   125              
7                   125              
8                   125              
9                   27.5             

可能需要解释的是 SERIES_GENERATE_INTEGER. 这是一个HANA特有的内置函数,它从一个 "系列 "中返回若干记录。这里的系列是指在一个最小和最大的限制范围内,并且在两个相邻的时期之间有一定的步长尺寸的序列.更多关于如何工作的信息可以在HANA参考文档中找到,但现在只是说,这是最快的方法来生成一个有X行的结果集。

这个series-generator用于创建所有 "完整 "的生产轮次.对于第二部分的 UNION ALL 然后通过从内置的表格中选择,只创建一行 DUMMY (DUAL 在Oracle中),它保证只有一条记录.最后,这第二部分需要 "禁用",如果实际上没有剩余,这是由 WHERE 条款。

© www.soinside.com 2019 - 2024. All rights reserved.