提问人:XmalevolentX 提问时间:7/6/2022 最后编辑:XmalevolentX 更新时间:7/6/2022 访问量:58
影响总计数的多个部门的个人
Individuals in multiple departments affecting grand total count
问:
我有一个报告,我正在尝试简化,但我遇到了一个问题。
(不希望)报表的行/列当前如下所示。
部门 | 总 | 缓刑 (%) | 暂停 (%) |
---|---|---|---|
全体员工 | 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 中的各个逗号分隔值进行分组,或者是否有更好的方法来实现我的最终结果?
如能为实现这一目标提供任何帮助,将不胜感激。
答:
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;
评论
COUNT(*)
COUNT(DISTINCT employee_id)