我一直在审查一些相关的文章,但似乎无法在Oracle SQL中使它正常工作,因此需要一些指导。我正在处理一些数据,这些数据要根据条件数据从自定义列的同一表和列中输出值。
示例数据:
corp_acct Subscriber_id MAX_EXTENSIONS
10001 90000 1
10002 90001 1
10003 90002 2
10004 90003 3
10005 90004 1
10006 90005 2
10007 90005 1
在此示例中,我想输出两列corp_acct,少一列,多输出一列,在第一列中,我要输出max_extensions = 1的所有corp_acct,在第二列中,我要输出的所有corp_acct => 2
示例输出
lesser more
10001 10003
10002 10004
10005 10006
10007
如果可能的话,我不想创建任何新表,而只希望基于输出这两列来做一个选择语句。
答案 0 :(得分:1)
您可以使用聚合和row_number()
:
select max(case when max_extensions = 1 then corp_acct end) as col1,
max(case when max_extensions > 1 then corp_acct end) as col2
from (select t.*,
row_number() over (partition by case when max_extensions = 1 then 1 else 2 end order by corp_acct) as seqnum
from t
) t
group by seqnum;