这是我的第一个问题。对不起我的英语不好以及与西班牙语混合,来自乌拉圭。
我有这个ER(例子): enter image description here 我有一个人(CI)与许多概念值有一些关系。 这些概念是Unidad,Clase,Estado等,它们有一些像“Unidad”这样的值,如2021,1061,1003。 对于每个概念,有一些领域(Fecha,Expediente,Comentario,Usuario),其中行是CI-Concepto的最大“Fecha”值。 我想列出一个人的所有关系,如下:
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 :(得分: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;