在sql中动态组合行

xhv8bpkk  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(408)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

11个月前关门了。
改进这个问题
我知道有类似的问题,但我似乎找不到一个适合我的具体情况。我有些东西差不多是这样的:

GUID  | FIRST_NAME | LAST_NAME | LOAN_NUMBER | LOAN_AMOUNT
---------------------------------------------------------
0001  | FIRST      | LAST      | 01          | 1000
0001  | FIRST      | LAST      | 02          | 1500
0002  | SECOND     | PERSON    | 03          | 1250
0002  | SECOND     | PERSON    | 04          | 2000
0002  | SECOND     | PERSON    | 05          | 1250

等(任何人可以有不同数量的不同金额的贷款)。。。
我需要它看起来像这样:

GUID | FIRST_NAME | LAST_NAME | LOAN_AMOUNT1 | LOAN_AMOUNT2 | LOAN_AMOUNT3
--------------------------------------------------------------------------
0001 | FIRST      | LAST      | 1000         | 1500         |
0002 | SECOND     | PERSON    | 1250         | 2000         | 1250

在任何情况下,这个sql结果最终都会被传递到c应用程序中,因此,如果在c中更容易实现,那么我可能会改为使用该方法。

jfgube3f

jfgube3f1#

你可以用 row_number() 要对每个人的贷款进行排序,然后以条件聚合为轴心:

select
    guid,
    first_name,
    last_name,
    max(case when rn = 1 then loan_amount end) loan_amount1,
    max(case when rn = 2 then loan_amount end) loan_amount2,
    max(case when rn = 3 then loan_amount end) loan_amount3
from (
    select 
        t.*,
        row_number() over(partition by guid order by loan_number) rn
    from mytable t
) t
group by guid, first_name, last_name

如果您需要为每人办理3笔以上的贷款,您可以延长贷款期限 select 包含更多条件表达式的子句。

相关问题