这是我的第一个问题。抱歉,我的英语不好,而且还混杂着西类牙语,我来自乌拉圭。
我有这个急诊室(示例): enter image description here 我有一个与许多概念值有某种关系的人(CI)。 这些概念有 Unidad、Clase、Estado 等,它们有一些关联的值,例如“Unidad”的 2021,1061,1003。 对于每个概念,都有一些字段(Fecha、Expediente、Commentario、Usuario),其中行是 CI 概念的最大“Fecha”值。 我想列出一个人的所有关系,如下所示:
标题:
CI | Concepto1_clave | Concepto1_Fecha | Concepto1_Expediente | Concepto1_Comentario | Concepto1_Usuario | Concepto2_clave | Concepto2_Fecha | Concepto2_Expediente | Concepto2_Comentario | Concepto2_Usuario | ConceptoN...
值(value)观:
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 来获取结果。 非常感谢您的帮助!!
编辑:
这是我的 table :
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 | |
+--------+---------+-------------+------------------+------------------+---------------+------------------+------------------------+-----------------------------+-----------------------------+--------------------------+
最佳答案
非常感谢! 我用这个查询解决了它。希望可以帮助别人。
/* 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;
关于php - MySql 中表的动态 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38623315/