影响总计数的多个部门的个人

Individuals in multiple departments affecting grand total count

提问人:XmalevolentX 提问时间:7/6/2022 最后编辑:XmalevolentX 更新时间:7/6/2022 访问量:58

问:

我有一个报告,我正在尝试简化,但我遇到了一个问题。

(不希望)报表的行/列当前如下所示。

部门 缓刑 (%) 暂停 (%)
全体员工 32 16.3 1.4
所有团队 30 23.5 2.2
男子团体总数 10 14.8 2.8
女子团体总数 10 34.3 1.4
男装 10 5.9 0.0
女装 10 21.4 0.0
UniSec 磨损 10 15.0 6.3

之所以发生这种情况,是因为两个人在两个团队中工作。一个人从事男装和中性服装,一个人从事女装和中性服装。下表有这样的记录。

科尔1 科尔2
1234 男装
1234 中性服装
9876 女装
9876 中性服装

(所需)我正在寻找这样的东西。

部门 缓刑 (%) 暂停 (%)
全体员工 30 16.3 1.4
所有团队 30 23.5 2.2
男子团体总数 10 14.8 2.8
女子团体总数 10 34.3 1.4
男装 10 5.9 0.0
女装 10 21.4 0.0
UniSec 磨损 10 15.0 6.3

我考虑过在 Col2 上使用 LISTAGG() 来获得这种影响。

科尔1 科尔2
1234 男装,中性服装
9876 女装,中性服装

使用 LISTAGG() 为我提供了“所有员工”的正确计数,但随后我得到了“男装,中性服装”的分组,而不是“男装”的单独分组和“中性穿装”的分组。是否可以在 LISTAGG()'ed 后按 Col2 中的各个逗号分隔值进行分组,或者是否有更好的方法来实现我的最终结果?

如能为实现这一目标提供任何帮助,将不胜感激。

SQL Oracle 甲骨文 12.2

评论

0赞 Tim Biegeleisen 7/6/2022
您应该通过显示原始起始数据以及当前输出和您实际希望看到的输出来重新表述您的问题。
0赞 Thorsten Kettner 7/6/2022
我是否正确理解唯一的问题是员工总数?因为你正在使用,也许不是?COUNT(*)COUNT(DISTINCT employee_id)

答:

1赞 psaraj12 7/6/2022 #1

我建议单独纠正All_Employees数据,而不是进行 LISTAGG。 或 使用单独的表来 LISTAGG 和取消 LISTAGG 您的数据,该表与用于计算总计、试用期和暂停数据的原始表不同

对于 un-LISTAGG,您可以使用以下示例,其中 table_two 是源表。

    with  
    d2 as (
      select 
        distinct id, 
        regexp_substr(
          products, '[^,]+', 1, column_value
        ) as products 
      from 
        table_two cross 
        join TABLE(
          Cast(
            MULTISET (
              SELECT 
                LEVEL 
              FROM 
                dual CONNECT BY level <= REGEXP_COUNT(products, '[^,]+')
            ) AS sys.ODCINUMBERLIST
          )
        )
    ) 
    SELECT 
      ID, 
      PRODUCTS 
    FROM 
      d2;