Oracle 使用pivot实现动态行转列思路

起因:因工作业务需要,需要实现A表和B表数据联查。

前提条件:

1.A表一条业务数据是一行的。

2.B表业务数据是动态多行。

3.一条A表数据对多条B表的数据

典型的一对多关系,A表的主键存储在B表中,通过A表的主键能查询到所有条数关联的业务数据。

这样就需要实现写sql实现。

原由:一般的认知是pivot函数支持固定列的行转列。支持动态的行转列需要转变下思路。

实现如下:

select *
from A a
         inner join
     (
         select *
         from (select H.FIELD_CODE, H.FIELD_VALUE, H.DOUBT_ID
               from B H) G
             pivot (max(FIELD_VALUE) for FIELD_CODE in (
                 'STAD_AMT' STAD_AMT, 'INPUT_DATE' INPUT_DATE
         
                 ))) F on a.DOUBT_ID = F.DOUBT_ID
where STAD_AMT = 666

实现上面sql的思路:

1.

select *
from A a

这部分是直接写在mybatis里面的

2.

inner join
     (
         select *
         from (select H.FIELD_CODE, H.FIELD_VALUE, H.DOUBT_ID

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle 中,如果你想将三行同时进行行转列操作,可以使用多次的 PIVOT 操作或者使用自连接(SELF JOIN)来实现。下面是两种方法的示例: 方法一:使用多次的 PIVOT 操作 假设你有一个表格 `your_table`,其中包含 `column1`、`column2`和`column3`。你希望将三行同时进行行转列操作。可以使用以下查询: ```sql SELECT * FROM ( SELECT column1, column2, column3 FROM your_table ) PIVOT ( MAX(column2) AS column2, MAX(column3) AS column3 FOR (column1) IN ('row1' AS row1, 'row2' AS row2, 'row3' AS row3) ); ``` 在上面的示例中,我们使用了多次的 PIVOT 操作来将每行的数据转换为。每个 PIVOT 操作都定义了相应的名和别名。你可以根据实际需求修改这些名和别名。 方法二:使用自连接(SELF JOIN) 另一种方法是使用自连接来实现行转列操作。以下是一个示例: ```sql SELECT t1.column1, t1.column2 AS column2_row1, t2.column2 AS column2_row2, t3.column2 AS column2_row3, t1.column3 AS column3_row1, t2.column3 AS column3_row2, t3.column3 AS column3_row3 FROM your_table t1 JOIN your_table t2 ON t1.column1 = t2.column1 JOIN your_table t3 ON t1.column1 = t3.column1 WHERE t1.column1 = 'row1' AND t2.column1 = 'row2' AND t3.column1 = 'row3'; ``` 在上面的示例中,我们使用了自连接来将三行数据合并在一起,并通过 WHERE 子句筛选出指定的行。你可以根据实际需求调整 WHERE 子句和选择的。注意,这种方法需要确保每个行的数据都存在,并且需要进行多个自连接操作,可能会影响查询的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值