Mysql多表联合查询,行转列

深藏阁楼爱情的钟 2024-03-23 14:57 122阅读 0赞

项目中,所有的字段是通过key和value的形式存放的,以至于导致查询某一个人的数据,需要进行判断,
一开始在网上找了很多,大部分都是 一样demo,
第一次尝试,结果不是我想要的

  1. select id,project_id,
  2. sum(if(`variable`='SITEID',variable_value,null)) as core_code,
  3. sum(if(`variable`='CRFVER',variable_value,null)) as crf_version,
  4. create_time,update_time,create_by,update_by,is_deleted
  5. from (
  6. SELECT
  7. crfSubject.id,
  8. crfSubject.project_id,
  9. crfSubject.centre_id,
  10. subDetails.variable,
  11. subDetails.variable_name,
  12. subDetails.variable_value,
  13. subData.create_time,
  14. subData.update_time,
  15. subData.create_by,
  16. subData.update_by,
  17. crfSubject.is_deleted
  18. FROM
  19. edc_crf_subject AS crfSubject
  20. LEFT JOIN edc_crf_subject_data AS subData ON crfSubject.id = subData.subject_id
  21. LEFT JOIN edc_crf_subject_data_details AS subDetails ON subData.id = subDetails.subject_data_id
  22. WHERE
  23. subData.crf_name = 'SUBJECT'
  24. AND subDetails.is_deleted = '0'
  25. ) AS info
  26. GROUP BY
  27. id;

core_code是字符,但却搞成 了数字 ,问题就出在sum ,所以 如果不是计算类型的,最好不要用su
在这里插入图片描述
最后使用max

  1. select id,
  2. max( if(variable='SUBJID',variable_value,null)) as sub_code,
  3. max( if(variable='SITEID',variable_value,null)) as core_code,
  4. max( if(variable='SITENAME',variable_value,null)) as core_name,
  5. max( if(variable='STATUS',variable_value,1)) as sub_status,
  6. max( if(variable='CRFVER',variable_value,null)) as crf_version,
  7. max( if(variable='CRFSTS',variable_value,1)) as crf_status,
  8. max( if(variable='COUNTRY',variable_value,null)) as county,
  9. max( if(variable='INVNAM',variable_value,null)) as invnam,
  10. max( if(variable='STUDYID',variable_value,null)) as study_id,
  11. create_time,create_by,update_time,update_by,is_deleted
  12. from (
  13. SELECT
  14. crfSubject.id,
  15. crfSubject.project_id,
  16. crfSubject.centre_id,
  17. subDetails.variable,
  18. subDetails.variable_name,
  19. subDetails.variable_value,
  20. subData.create_time,
  21. subData.update_time,
  22. subData.create_by,
  23. subData.update_by,
  24. crfSubject.is_deleted
  25. FROM
  26. edc_crf_subject AS crfSubject
  27. LEFT JOIN edc_crf_subject_data AS subData ON crfSubject.id = subData.subject_id
  28. LEFT JOIN edc_crf_subject_data_details AS subDetails ON subData.id = subDetails.subject_data_id
  29. WHERE
  30. subData.crf_name = 'SUBJECT'
  31. AND subDetails.is_deleted = '0') as base_info group by id;

得到想要的结果
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,122人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL联合查询复杂性挑战

    在MySQL中,多表联合查询可能会面临以下复杂性挑战: 1. 数据冗余:如果多个表有重复的数据,联合查询时需要处理这些重复,这可能导致查询复杂度增加。 2. 等值连接条件: