2016-07-27 7 views
0

これは私の最初の質問です。私の悪い英語とウルグアイのスペイン語とのミックスで申し訳ありません。MySqlの表の動的ヘッダー

私はこのERを持っています(例): enter image description here 私は多くの概念価値との関係を持つPerson(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 | ... 

私が作成したときにすべてが、ダイナミックでなければなりません新しいコンセプトは、それはクエリに表示されます。 私は多くのquerysと手続きを試していますが、succesはありません。 Im結果を得るためにPHPを使用しています。 ありがとうございました。

EDIT:

私のテーブルがあります。

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; 
関連する問題