MySQL में UNPIVOT फ़ंक्शन नहीं है, लेकिन आप UNION ALL
का उपयोग करके अपने कॉलम को पंक्तियों में बदल सकते हैं ।
मूल सिंटैक्स है:
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;
आपके मामले में, आप कहते हैं कि आपको गतिशील कॉलम के समाधान की आवश्यकता है। यदि ऐसा है, तो आपको गतिशील 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;
देखें SQL Fiddle with Demo