doupai8095 2016-07-27 21:15
浏览 9
已采纳

来自MySql中表的动态标头

this is my first question. Sorry for my bad English and the mix with Spanish, im from Uruguay.

I have this ER (example) : enter image description here I have a Person (CI) with some relationship with many concepts values. The concepts are Unidad, Clase, Estado, etc. and they have some values asociated like 2021,1061,1003 for "Unidad". For each concepts, theres some fields (Fecha, Expediente, Comentario, Usuario) where the row is the max "Fecha" values of the CI-Concepto. I want to list all the relations of a person, like this:

HEADERS:

CI  |   Concepto1_clave |   Concepto1_Fecha |   Concepto1_Expediente    |   Concepto1_Comentario    |   Concepto1_Usuario   |   Concepto2_clave |   Concepto2_Fecha |   Concepto2_Expediente    |   Concepto2_Comentario    |   Concepto2_Usuario   |   ConceptoN...

VALUES:

Person_CI   |   Value of concepto 1 |   Fecha of concepto 1 |   Expediente of concepto 1    |   Comentairo of concepto 1    |   Usuario of concepto 1   |   Value of concepto 2 |   Fecha of concepto 2 |   Expediente of concepto 2    |   Comentairo of concepto 2    |   Usuario of concepto 2   |   ...

All must be dynamic, when i create a new concept, it will appear on query. I try with many querys and procedures and dont have succes. Im using PHP to get the result. Thank u so much for your help!!

EDIT:

There are my tables:

Persona_ClaveConcepto

    +--------+-------------------+------------+---------+---------------+---------------+---------+
| CI     | Concepto          | Fecha      | Clave   | Expediente    | Comentario    | Usuario |
+--------+-------------------+------------+---------+---------------+---------------+---------+
| 238351 | Clase             | 1997-06-10 | X.C0.1E | FOR06/97      | CARGA SISTEMA |         |
+--------+-------------------+------------+---------+---------------+---------------+---------+
| 238351 | Situacion laboral | 1997-06-01 | 52      | FOR06/97      | CARGA SISTEMA |         |
+--------+-------------------+------------+---------+---------------+---------------+---------+
| 238351 | Unidad            | 2015-07-16 | 1532    | CARGA SISTEMA |               |         |
+--------+-------------------+------------+---------+---------------+---------------+---------+
| 612344 | Clase             | 0000-00-00 | X.C0.1E | CARGA SISTEMA |               |         |
+--------+-------------------+------------+---------+---------------+---------------+---------+
| 612344 | Situacion laboral | 1996-03-01 | 52      | HAB           | CARGA SISTEMA |         |
+--------+-------------------+------------+---------+---------------+---------------+---------+

Expected result (something like that) with all of "Concepto":

    +--------+---------+-------------+------------------+------------------+---------------+------------------+------------------------+-----------------------------+-----------------------------+--------------------------+
| CI     | Clase   | Fecha_Clase | Expediente_Clase | Comentario_Clase | Usuario_Clase | SituacionLaboral | Fecha_SituacionLaboral | Expediente_SituacionLaboral | Comentario_SituacionLaboral | Usuario_SituacionLaboral |
+--------+---------+-------------+------------------+------------------+---------------+------------------+------------------------+-----------------------------+-----------------------------+--------------------------+
| 238351 | X.C0.1E | 1997-06-10  | FOR06/97         | CARGA SISTEMA    |               | 52               | 1997-06-01             | FOR06/97                    | CARGA SISTEMA               |                          |
+--------+---------+-------------+------------------+------------------+---------------+------------------+------------------------+-----------------------------+-----------------------------+--------------------------+
  • 写回答

1条回答 默认 最新

  • dongxiaoxing3058 2016-08-01 14:26
    关注

    Thanks a lot! I solve it with this query. Hope can help someone else.

    /* GROUP CONCAT LIMIT*/
    SET SESSION group_concat_max_len = 1000000;
    
    /* DECLARE */
    SET @sqlMax = NULL;
    SET @sqlCase = NULL;
    SET @sql = NULL;
    
    /* SET sqlMax (discard empty values) */
    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'GROUP_CONCAT(',replace(Concepto, ' ', ''),') AS ',replace(Concepto, ' ', ''),
          ',GROUP_CONCAT(',replace(Concepto, ' ', ''),'_Fecha) AS ',replace(Concepto, ' ', ''),'_Fecha',
          ',GROUP_CONCAT(',replace(Concepto, ' ', ''),'_Expediente) AS ',replace(Concepto, ' ', ''),'_Expediente',
          ',GROUP_CONCAT(',replace(Concepto, ' ', ''),'_Comentario) AS ',replace(Concepto, ' ', ''),'_Comentario',
          ',GROUP_CONCAT(',replace(Concepto, ' ', ''),'_Usuario) AS ',replace(Concepto, ' ', ''),'_Usuario'
        )
      ) 
    INTO @sqlMax
    from persona_claveconceptoperseo;
    
    /* SET sqlCase */
    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'case when Concepto = ''',Concepto,''' then Clave end AS ',replace(Concepto, ' ', ''),
          ',case when Concepto = ''',Concepto,''' then Fecha end AS ',replace(Concepto, ' ', ''),'_Fecha'
          ',case when Concepto = ''',Concepto,''' then Expediente end AS ',replace(Concepto, ' ', ''),'_Expediente'
          ',case when Concepto = ''',Concepto,''' then Comentario end AS ',replace(Concepto, ' ', ''),'_Comentario'
          ',case when Concepto = ''',Concepto,''' then Usuario end AS ',replace(Concepto, ' ', ''),'_Usuario'
        )
      ) 
    INTO @sqlCase
    from persona_claveconceptoperseo;
    
    /* SET sql */
    SET @sql = CONCAT('SELECT CI, ', @sqlMax, ' 
                      FROM (
                        SELECT
                        CI,',@sqlCase,'
                      FROM persona_claveconceptoperseo) as t1
    GROUP BY t1.CI');
    
    /* EXECUTE */
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c