起因:因工作业务需要,需要实现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