SQL行转列

比如有 A B 表
A 表
ID,NAME
1,A
2,B
3,C

B 表
FK_ID,TYPE,VALUE1,VALUE2
1,cpu,100,90
1,mem,90,89
2,cpu,20,22
2,mem,100,99
3,cpu,90,60
3,mem,20,20

求这样的结果
A_ID,A_NAME,A_CPU_RECORD,A_MEM_RECORD
1,A,'100/90',"90/89"
2,B,'20/22',"100/99"

3,C,'90/60',"20/20"


代码如下:

SELECT a.id AS a_id,
       a.name AS a_name,
       MAX(CASE WHEN TYPE='cpu' THEN CONCAT(b.value1,'/',b.value2) END) AS A_CPU_RECORD,
       MAX(CASE WHEN TYPE='mem' THEN CONCAT(b.value1,'/',b.value2) END) AS A_MEM_RECORD
              
FROM 
(
	SELECT 1 AS ID,'A' AS NAME UNION ALL
	SELECT 2,'B' UNION ALL
	SELECT 3,'C'
)a
INNER JOIN 
(
	SELECT 1 FK_ID,'cpu' TYPE,'100' VALUE1,'90' VALUE2 UNION ALL
	SELECT 1,'mem','90','89' UNION ALL
	SELECT 2,'cpu','20','22' UNION ALL
	SELECT 2,'mem','100','99' UNION ALL
	SELECT 3,'cpu','90','60'  UNION ALL
	SELECT 3,'mem','20','20'
)b
ON a.id = b.fk_id
GROUP BY a.id,a.name

查询结果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值