Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

consulta dinâmica/crosstab do mysql


Embora a resposta estática de @John funcione muito bem, se você tiver um número desconhecido de colunas que deseja transformar, consideraria usar instruções preparadas para obter os resultados:
SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'GROUP_CONCAT((CASE node_id when ',
      node_id,
      ' then entered_value else NULL END)) AS user_input',
      node_id
    )
  ) INTO @sql
FROM trn_user_log;


SET @sql = CONCAT('SELECT app_id, transaction_id, mobile_no, ', @sql, ' 
                  FROM trn_user_log 
                  GROUP BY app_id, transaction_id, mobile_no');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

veja SQL Fiddle with Demo

Quanto ao seu segundo, por favor, esclareça o que você está tentando fazer, não está claro.