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