我需要围绕一个列进行旋转,但它必须依赖于另一列。
G_ID COL_ONE COL_TWO COL_THREE
146157 228830 null 228828
146157 228831 228830 228863
我有G_ID,它在我想要转动的方式上是不变的。我想要展示
G_ID COL_THREE_1 COL_THREE_2
146157 228863 228828
现在,这里的业务规则是它变得有趣的地方,我需要一些指示。
在这个示例中,我只显示一个G_ID,但有很多,所以我需要一些可以在多个G_ID上工作的东西
关于此的任何指示。我发现这有点挑战,所以很高兴有一个去,但只需要一些指示从哪里开始
由于
答案 0 :(得分:1)
以下是使用聚合函数的尝试(我无法弄清楚如何使用pivot
子句执行此操作):
select t.g_id,
min(t.val_three) keep (dense_rank first order by t.val_two) VAL_THREE_1,
max(t.val_three) keep (dense_rank last order by t.val_two) VAL_THREE_2
from my_table t
group by t.g_id
;
我向my_table
添加了更多值以提供更好的观点:
G_ID VAL_ONE VAL_TWO VAL_THREE
146157 228830 null 228828
146157 228831 228830 228863
146234 228832 null 228567
146234 228833 228835 228789
然后我得到:
G_ID VAL_THREE_1 VAL_THREE_2
1 146157 228863 228828
2 146234 228789 228567
答案 1 :(得分:1)
对于这个要求,我猜自我加入就足够了:
with tab (G_ID,COL_ONE,COL_TWO,COL_THREE) as (
select 146157,228830,null,228828 from dual union all
select 146157,228831,228830,228863 from dual union all
select 146158,228831,null,228829 from dual union all
select 146158,228832,228831,228864 from dual)
--------------------------
-- End if Data preparation
--------------------------
select a.g_id, b.col_three col_three_1, a.col_three col_three_2
from tab a
join tab b on a.COL_ONE = b.COL_TWO and a.G_ID = b.G_ID
where b.col_two is not null;
输出:
| G_ID | COL_THREE_1 | COL_THREE_2 |
|--------|-------------|-------------|
| 146157 | 228863 | 228828 |
| 146158 | 228864 | 228829 |