请教各位大佬,这句sql应该怎么写。

图片说明

行转列,参考下https://blog.csdn.net/wyqwilliam/article/details/82558450
看看


SELECT DISTINCT a.t_id,
(SELECT value FROM test b WHERE a.t_id = b.t_id AND b.type = '1') AS '姓名',
(SELECT value FROM test b WHERE a.t_id = b.t_id AND b.type = '2') AS '性别',
(SELECT value FROM test b WHERE a.t_id = b.t_id AND b.type = '3') AS '年龄'
FROM test a
GROUP BY a.t_id

可以参考一下


with tab as
(
select 100 ID,1 TYPE,1 T_ID,'张三' VALUE FROM DUAL UNION ALL
select 200 ID,2 TYPE,1 T_ID,'男' VALUE FROM DUAL UNION ALL
select 300 ID,3 TYPE,1 T_ID,'50' VALUE FROM DUAL UNION ALL
select 101 ID,1 TYPE,2 T_ID,'刘二' VALUE FROM DUAL UNION ALL
select 201 ID,2 TYPE,2 T_ID,'男' VALUE FROM DUAL UNION ALL
select 301 ID,3 TYPE,2 T_ID,'30' VALUE FROM DUAL UNION ALL
select 102 ID,1 TYPE,3 T_ID,'刘三' VALUE FROM DUAL UNION ALL
select 202 ID,2 TYPE,3 T_ID,'女' VALUE FROM DUAL UNION ALL
select 302 ID,3 TYPE,3 T_ID,'10' VALUE FROM DUAL
)
SELECT *
FROM (select type,t_id,value from TAB) a
PIVOT ( max(value) for type in (1 as 姓名,2 as 性别,3 as 年龄)
)
order by t_id;