Mysql
 sql >> база данни >  >> RDS >> Mysql

Задаване на стойности на колони като имена на колони в резултата от SQL заявката

Това се прави с въртяща се таблица . Групиране по id , издавате CASE изрази за всяка стойност, която искате да уловите в колона, и използвайте нещо като MAX() обобщете, за да елиминирате нулевите стойности и да свиете до един ред.

SELECT
  id,
  /* if col1 matches the name string of this CASE, return col2, otherwise return NULL */
  /* Then, the outer MAX() aggregate will eliminate all NULLs and collapse it down to one row per id */
  MAX(CASE WHEN (col1 = 'name') THEN col2 ELSE NULL END) AS name,
  MAX(CASE WHEN (col1 = 'name2') THEN col2 ELSE NULL END) AS name2,
  MAX(CASE WHEN (col1 = 'name3') THEN col2 ELSE NULL END) AS name3
FROM
  yourtable
GROUP BY id
ORDER BY id

Ето работеща извадка

Забележка:Това работи само както е за краен и известен брой възможни стойности за col1 . Ако броят на възможните стойности е неизвестен, трябва да изградите SQL израза динамично в цикъл.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. php качване на файл, как да ограничите типа на качване на файлове

  2. Как да конфигурирате Tomcat да се свързва с MySQL

  3. LIMIT ключова дума в MySQL с подготвено изявление

  4. MySQL CHAR() срещу T-SQL CHAR():Каква е разликата?

  5. Как да възстановим непоследователен MySQL Slave?