2016-07-27 71 views
0

这是我的第一个问题。对不起,我的英语不好,与西班牙语混在一起,来自乌拉圭。动态标题从MySql中的表

我有这个ER(示例): enter image description here 我有一个Person(CI)与许多概念值有一些关系。 这些概念是Unidad,Clase,Estado等,他们有一些价值像“Unidad”2021,1061,1003。 对于每个概念,那里有一些字段(日期星,Expediente,Comentario,Usuario),其中行是最大“出生日期”的CI-Concepto的值。 我想列出一个人的所有关系,是这样的:

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 | ... 

一切都必须是动态的,当我创建新的概念,它会出现在查询中。 我尝试许多查询和程序,并没有成功。 我使用PHP来获得结果。 非常感谢您的帮助!

编辑:

有我的表:

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 |   | 
+--------+-------------------+------------+---------+---------------+---------------+---------+ 

预期结果(类似的)所有 “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    |       | 
+--------+---------+-------------+------------------+------------------+---------------+------------------+------------------------+-----------------------------+-----------------------------+--------------------------+ 
+0

你能提供一些您尝试查询或代码? – chris85

+0

你可能想要一个数据透视查询,而且mysql不支持它们。解决方法变得非常难看,非常快。你应该在客户端代码中进行旋转。 –

回答

0

非常感谢! 我用这个查询来解决它。希望可以帮助别人。

/* 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;