Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Transpozycja dynamicznych kolumn do wierszy

MySQL nie posiada funkcji UNPIVOT, ale możesz przekonwertować kolumny na wiersze za pomocą UNION ALL .

Podstawowa składnia to:

select id, word, qty
from
(
  select id, 'abc' word, abc qty
  from yt
  where abc > 0
  union all
  select id, 'brt', brt
  from yt
  where brt > 0
) d
order by id;

W Twoim przypadku stwierdzasz, że potrzebujesz rozwiązania dla kolumn dynamicznych. W takim przypadku będziesz musiał użyć przygotowanej instrukcji do wygenerowania dynamicznego SQL:

SET @sql = NULL;

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'select id, ''',
      c.column_name,
      ''' as word, ',
      c.column_name,
      ' as qty 
      from yt 
      where ',
      c.column_name,
      ' > 0'
    ) SEPARATOR ' UNION ALL '
  ) INTO @sql
FROM information_schema.columns c
where c.table_name = 'yt'
  and c.column_name not in ('id')
order by c.ordinal_position;

SET @sql 
  = CONCAT('select id, word, qty
           from
           (', @sql, ') x  order by id');


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

Zobacz SQL Fiddle z wersją demonstracyjną



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Instalacja i konfiguracja MySQL na Ubuntu 20.04

  2. Naruszenie ograniczenia integralności:1452 Nie można dodać ani zaktualizować wiersza podrzędnego:

  3. Jak obliczyć procent kolumny w MySQL?

  4. Generowanie losowego i unikalnego ciągu 8 znaków za pomocą MySQL

  5. Przewodnik po projektowaniu bazy danych dla Menedżera zadań w MySQL