sql >> Databáze >  >> RDS >> Mysql

mysql pivot/křížový dotaz

I když statická odpověď @Johna funguje skvěle, pokud máte neznámý počet sloupců, které chcete transformovat, zvážil bych použití připravených příkazů k získání výsledků:

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;

viz SQL Fiddle s ukázkou

Pokud jde o váš druhý, ujasněte si, co se snažíte udělat, není jasné.



  1. Je COUNT(rowid) rychlejší než COUNT(*)?

  2. Přestaňte prosím používat tento anti-vzor UPSERT

  3. Jak mohu převést bigint (časové razítko UNIX) na datum a čas na serveru SQL?

  4. ScaleGrid v užším výběru pro program Cloud Awards 2017–2018