【问题标题】:Oracle SQL data fetch orderOracle SQL 数据获取顺序
【发布时间】:2020-05-07 14:19:18
【问题描述】:

我正在尝试实现此布局。我没有共享查询,因为它正在工作,我只是想知道使用什么函数来实现格式“2”。一开始我在做UNION ALL,这就是我得到格式'1'的方式。数据是从多个表中获取的。我正在尝试在没有 PLSQL 的情况下实现这一目标。谢谢!

我如何得到它'1'

    +-----+----+---+-----+
    |col_1|col2|...|col_n|
    +-----+----+---+-----+
    |  A  |bla |...+  3  |
    +-----+----+---+-----+
    |  A  |bla1|...|  1  |
    +-----+----+---+-----+
    |  B  |asd |...+  2  |
    +-----+----+---+-----+
    |  B  |qwe1|...|  6  |
    +-----+----+---+-----+
    |  B  |zxc1|...|  1  |
    +-----+----+---+-----+
    |Sum:A|    |...|  4  |
    +-----+----+---+-----+
    |Sum:B|    |...|  9  |
    +-----+----+---+-----+

我想如何转换它'2'

    +-----+----+---+-----+
    |col_1|col2|...|col_n|
    +-----+----+---+-----+
    |  A  |bla |...+  3  |
    +-----+----+---+-----+
    |     |bla1|...|  1  |
    +-----+----+---+-----+
    |Sum:A|    |...|  4  |
    +-----+----+---+-----+
    |  B  |asd |...+  2  |
    +-----+----+---+-----+
    |     |qwe1|...|  6  |
    +-----+----+---+-----+
    |     |zxc1|...|  1  |
    +-----+----+---+-----+
    |Sum:B|    |...|  9  |
    +-----+----+---+-----+

select 
        col_1
       ,col_2
       ...
       col_n
from(
    select 
        kce.name as col_1
       ,kcp.other_name as col_2
       ...
       ,irm.col_n
    from tab_1 irm
    left join tab_2 kce
    on irm.irm_s_id = kce.id
    left join tab_3 kcp
    on irm.irm_p_id = kcp.id
    where irm.customer = :P1_GROUP
    order by irm.irm_s_id,irm.irm_p_id
)
union all
select 'Sum '||col_1
       ,null
       ...
       ,sum(col_n)
from(
    select 
        kce.name as col_1
       ,kcp.other_name as col_2
       ...
       ,irm.col_n
    from tab_1 irm
    left join tab_2 kce
    on irm.irm_s_id = kce.id
    left join tab_3 kcp
    on irm.irm_p_id = kcp.id
    where irm.customer = :P1_GROUP
    order by irm.irm_s_id,irm.irm_p_id
) group by 'Sum '||col_1

【问题讨论】:

    标签: sql oracle11g oracle-apex


    【解决方案1】:

    我认为对您有用的是在您的查询中创建另一列,即 col_1 ||总和(在 col_1 值处的所有值)。

    所以 col_1 = A 的所有行都会将此列设为“A 4”或类似“所有 A 的总和为 4”之类的内容。

    然后在交互式报告中显示它,并在这个新列上设置一个分隔符。

    然后,您将把查询整齐地分类为具有不同 col_1 值的块,以及旁边该值下的块的总和。

    这将需要重写查询,实际上只是对它的一个小补充。但我们无能为力,因为您没有发布查询。

    编辑:

    现在您添加了查询,我注意到您可以做的另一件事

    SELECT * FROM(
        select  col_1 as col_0
               ,col_1
               ,col_2
               ...
               col_n
        from(
            select 
                kce.name as col_1
               ,kcp.other_name as col_2
               ...
               ,irm.col_n
            from tab_1 irm
            left join tab_2 kce
            on irm.irm_s_id = kce.id
            left join tab_3 kcp
            on irm.irm_p_id = kcp.id
            where irm.customer = :P1_GROUP
            order by irm.irm_s_id,irm.irm_p_id
        )
        union all
        select  col_1 as col_0
               ,'Sum '||col_1 as col_1
               ,null
               ...
               ,sum(col_n)
        from(
            select 
                kce.name as col_1
               ,kcp.other_name as col_2
               ...
               ,irm.col_n
            from tab_1 irm
            left join tab_2 kce
            on irm.irm_s_id = kce.id
            left join tab_3 kcp
            on irm.irm_p_id = kcp.id
            where irm.customer = :P1_GROUP
            order by irm.irm_s_id,irm.irm_p_id
        ) group by 'Sum '||col_1)
      ORDER BY col_0, col_1 desc
    

    这基本上只是添加另一列 col_1 的值,然后按此排序,以便将所有 As 和 A 的总和放在一起,所有 B... 然后 col_1 的顺序是为了确保 A 的总和位于 A 之前或之后,具体取决于您选择升序还是降序。

    如果您随后将第一列隐藏在 apex 中,则会显示您要查找的内容。

    【讨论】:

    • 谢谢。我必须尝试,我也分享了查询。
    • @AdiC.N.我根据您的查询以新的可能性编辑了我的答案。因为如果你走我第一次建议的路线,你需要将 UNION ALL 下的所有内容放入第一个查询的列中。这当然是可能的,只是不太好。
    【解决方案2】:

    APEX 在经典报告中内置了对这种格式的支持 - 它称为中断格式。请按照以下步骤了解其工作原理:

    使用以下查询创建经典报告:

    select job,
      ename,
      sal
    from emp
    order by job, sal
    

    进入报告选项并将分列(在分列格式下)设置为第一列。然后,深入 SAL 列并启用 Sum 设置。

    这应该给你这样的东西:

    有关更多信息,请参阅 Jeff Eberhard 的这篇博文:https://blog.eberapp.com/ords/f?p=BLOG:READ:::::ARTICLE:6555300346233507&cs=17CDD85DFBD5E33D7BD8F7945B94027CE

    【讨论】:

    • 我不知道这个。确实节省时间。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-07-06
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多