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一致




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章