使用 HANA/CrystalReports 中参数的计算查询

Calculated query with parameters in HANA/CrystalReports

我无法解释我的必要性,所以我将描述场景。


场景:

我们想创建一个报告,其中已经完成了这些计算,我们认为第一步是根据这个场景的值,return 像这样:

圆形数量(KG)
1 125
2 125
3 125
4 125
5 125
6 125
7 125
8 125
9 27,5

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


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

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

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

和余数

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

我们正在使用:

如有任何帮助,我们将不胜感激

提前致谢!

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

一种方法是将需求转化为一个函数,该函数接受两个输入参数值和 returns 生产轮次的 table。

这看起来像这样:

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;

您可以像使用任何函数一样使用此函数 table - 但参数为:

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 的内置函数,它 returns 来自 "series" 的一些记录。这里的系列是在最小和最大限制内的一系列周期,并且在两个相邻周期之间具有一定的步长。 有关其工作原理的更多信息,请参阅 HANA 参考文档,但现在只是说,这是生成具有 X 行的结果集的最快方法。

此系列生成器用于创建所有 "full" 生产回合。 对于 UNION ALL 的第二部分,然后通过从内置的 table DUMMY(Oracle 中的 DUAL)中进行选择来创建一行,保证只有一个单条记录。 最后,如果实际上没有余数,则第二部分需要是 "disabled",这是由 WHERE 子句完成的。