Oracle-在数据透视表中查找数据
我有一个表,其列如下:Oracle-在数据透视表中查找数据,oracle,pivot,Oracle,Pivot,我有一个表,其列如下: 用户ID、用户类型、部门、细分 对于每个用户标识,将有一个或多个用户类型(例如,用户可以是开发人员或管理员,或两者兼有)。根据用户类型,用户可以订阅分区和可选的分区。 USERID、USERTYPE和DIVISION不是空列 需要以下格式的输出- 用户ID、用户类型、分区1、分区2、分区3。。等等 因此,USERID-USERTYPE组合应该有一个唯一的记录。 为此,我使用了PIVOT操作符,它工作得很好。我还创建了一个临时表(比如表1)来存储这个查询的结果 现在,如果用
用户ID、用户类型、部门、细分
对于每个用户标识,将有一个或多个用户类型(例如,用户可以是开发人员或管理员,或两者兼有)。根据用户类型,用户可以订阅分区和可选的分区。
USERID、USERTYPE和DIVISION不是空列 需要以下格式的输出-
因此,USERID-USERTYPE组合应该有一个唯一的记录。 为此,我使用了PIVOT操作符,它工作得很好。我还创建了一个临时表(比如表1)来存储这个查询的结果
我已经使用listag函数编写了一个查询,它为每个USERID-USERTYPE组合提供了逗号分隔的细分。此查询的结果存储在表2中
请注意USERID=3的记录
我得到的是“连接查询的结果”,我需要的是“最终结果”
此外,我不能在pivot查询之前使用LISTAGG,因为稍后在构建pivot查询时,列出所有可能的细分组合会非常繁琐
我确信我在这里遗漏了一些小问题,但我不知道是什么
任何建议或指点都会大有帮助。
提前感谢。无需在pivot查询中列出所有细分,只需将其聚合在一组独特的
USERID、USERTYPE、DIVISION组合中,然后使用nvl(聚合值,DIVISION)
获得填充pivot表的值
如果source\u 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')
)
另外,动态生成列列表可能会很有用,这只是一个小故事。检查 pivot查询中不需要列出所有子部分,只需将其聚合在一组独特的组合中,这些组合包括USERID、USERTYPE、DIVISION
,并使用nvl(聚合值,DIVISION)
来获取填充pivot表的值
如果source\u 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')
)
另外,动态生成列列表可能会很有用,这只是一个小故事。检查 嗨,ThinkJet,这很有魅力!非常感谢您的快速回复。@Leonine总是乐于回答精心设计的问题。嗨,ThinkJet,这很有魅力!非常感谢您的快速回复。@Leonine总是乐于回答精心设计的问题。