首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle SQL数据获取顺序

Oracle SQL数据获取顺序
EN

Stack Overflow用户
提问于 2020-01-21 13:43:29
回答 2查看 96关注 0票数 1

我正在努力实现这个布局。我没有分享这个查询,因为它是有效的,我只是想知道使用什么函数来实现格式“2”。一开始我在做UNION ALL,这就是我如何获得格式'1‘的方式。数据从多个表中获取。我正试图在没有PLSQL的情况下实现这一点。谢谢!

我是怎么得到“1”的

代码语言:javascript
复制
    +-----+----+---+-----+
    |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”

代码语言:javascript
复制
    +-----+----+---+-----+
    |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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-21 18:24:30

Break在经典报告中内置了对这种格式的支持,它被称为中断格式。按照以下步骤了解它是如何工作的:

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

代码语言:javascript
复制
select job,
  ename,
  sal
from emp
order by job, sal

进入报表选项,并将中断列(在中断格式下)设置为第一列。然后,钻入SAL列并启用Sum设置。

会给你这样的东西:

请参阅Jeff的博客文章,以获得更多信息:https://blog.eberapp.com/ords/f?p=BLOG:READ:::::ARTICLE:6555300346233507&cs=17CDD85DFBD5E33D7BD8F7945B94027CE

票数 3
EN

Stack Overflow用户

发布于 2020-01-21 14:12:52

我认为对您有用的是在查询中创建另一列,即(以该col_1值表示的) col_1财政和。

因此,带有col_1 =A的所有行都将是‘A4’或类似于‘所有A的和为4’之类的内容,不管您想要什么。

然后在一个交互式报告中显示这一点,并在这个新列上设置一个中断。

然后,您将将查询整齐地排序为具有不同col_1值的块以及该值旁边的块之和。

这将需要重写查询,实际上只是对它的一小部分添加。但我们无法控制这一点,因为您没有发布查询。

编辑:

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

代码语言:javascript
复制
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之前或之后出现,这取决于您选择升序还是降序。

如果你把这第一列隐藏在顶点,这会得到你想要的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59842500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档