mysql行转列 实现oracle的pivot

Mysql 行转列操作

有些业务中可能需要行转列操作
在oracle或者sqlserver中会有pivot完成行转列操作
mysql现有版本中没有对应,只能通过一些自定义操作来实现
比如以下语句

select *
  from (select pid, patientid, signscode, signsvalue, source,  opertime
        from compatient_signs) pivot(sum(signsvalue) for signscode in('temperature' temperture, 'pulse' pulse, 'breath' breath,'rsbp' rsbp, 'rdbp' rdbp,'spo2' spo2, 'height' height, 'weight' weight,'bmi' bmi,'fbgdl' fbgdl,'bhead' bhead)) table;

效果如下
在这里插入图片描述
通过查询compatient_signs表可得出以下结果(截取部分)
在这里插入图片描述
那么我们用mysql来实现一下

select
*
 from (
	select 
	   pid,patientid,  source,  opertime,
	  sum(signsvalue1) temperature,
	  sum(signsvalue2) pulse,
	  sum(signsvalue3) breath,
	  sum(signsvalue4) rsbp,
	  sum(signsvalue5) rdbp,
	  sum(signsvalue6) spo2,
	  sum(signsvalue7) height,
	  sum(signsvalue8) weight,
	  sum(signsvalue9) bmi,
	  sum(signsvalue10) fbgdl,
	  sum(signsvalue11) bhead
	 from (
	 select pid ,patientid, signscode, signsvalue, source,  opertime,
	    CASE WHEN signscode ='temperature'  THEN signsvalue END signsvalue1,
	    CASE WHEN signscode ='pulse' THEN signsvalue END signsvalue2,
	    CASE WHEN signscode ='breath'THEN  signsvalue END signsvalue3,
	    CASE WHEN signscode ='rsbp' THEN signsvalue END signsvalue4,
	    CASE WHEN signscode ='rdbp' THEN signsvalue END signsvalue5,
	    CASE WHEN signscode ='spo2' THEN signsvalue END signsvalue6,
	    CASE WHEN signscode ='height' THEN signsvalue END signsvalue7,
	    CASE WHEN signscode ='weight'THEN  signsvalue END signsvalue8,
	    CASE WHEN signscode ='bmi' THEN signsvalue END signsvalue9,
	    CASE WHEN signscode ='fbgdl' THEN signsvalue END signsvalue10,
	    CASE WHEN signscode ='bhead' THEN signsvalue END signsvalue11
	    from(select pid, patientid, signscode, signsvalue, source,opertime from compatient_signs GROUP BY PATIENTBUSIID, patientid, signscode, signsvalue, source,  opertime) table0
	) table1 
	 group by pid,patientid, source,  opertime
) table2

```得到的显示结果与oracle一致




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值