我有一张表格,其中的栏目如下:
USERID,USERTYPE,DIVISION,SUBDIVISION
对于每个用户标识,将有一个或多个用户类型(例如,用户可以是开发人员或管理员或两者)。根据用户类型,用户可以订阅分部和可选的子分区 USERID,USERTYPE和DIVISION不是空列。
输出需要采用以下格式 -
现在当我加入USERID和USERTYPE上的Table1和Table2表时,我得到一个USERID-USERTYPE组合的多行,这很明显但不是需要的。
以下是一些示例数据:
请注意USERID = 3的记录
我得到的是“加入查询的结果”,我需要的是“最终结果”。
此外,我不能在数据透视查询之前使用LISTAGG,因为稍后在构建数据透视查询时,列出所有可能的细分组合将会非常繁琐。
我确信我在这里遗漏了一些小问题,但无法弄清楚是什么。
任何建议或指示都会有很大的帮助
提前谢谢。
答案 0 :(得分:1)
无需在透视查询中列出所有细分,只需在USERID, USERTYPE, DIVISION
和使用nvl(AGGREGATED_VALUE,DIVISION)
的一组独特组合中汇总,即可获得填充数据透视表的值。
如果source_table
是您在问题中首先提到的USERID, USERTYPE, DIVISION, SUBDIVISION
列的表格,那么此示例必须适合您:
select * from (
select
userid,
usertype,
division,
-- get prepared value for pivot
nvl(
listagg(subdivision, ',') within group (order by subdivision),
division
) subdiv_list
from
source_table
group by
userid, usertype, division
)
pivot (
max(subdiv_list) for division in ('Div1', 'Div2')
)
P.S。就像一个侧面故事一样,动态生成列列表可能很有用。查看this SO article。