पिवट . करने के लिए MySQL में डेटा, आपको एक समग्र फ़ंक्शन और एक CASE
. दोनों का उपयोग करने की आवश्यकता होगी अभिव्यक्ति।
यदि आपके पास ज्ञात संख्या में कॉलम हैं, तो आप क्वेरी को हार्ड-कोड कर सकते हैं:
select p.postid,
max(case when t.tagname = 'Incident' then p.value end) Incident,
max(case when t.tagname = 'Location' then p.value end) Location,
max(case when t.tagname = 'Weapon' then p.value end) Weapon
from triples p
left join tags t
on p.tagid = t.id
group by p.postid;
देखें SQL Fiddle with Demo
लेकिन अगर आपके पास अज्ञात संख्या में कॉलम हैं, तो आपको डायनेमिक SQL बनाने के लिए तैयार स्टेटमेंट का उपयोग करना होगा:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'max(CASE WHEN TagName = ''',
TagName,
''' THEN p.value END) AS `',
TagName, '`'
)
) INTO @sql
FROM tags;
SET @sql
= CONCAT('SELECT p.postid, ', @sql, '
from triples p
left join tags t
on p.tagid = t.id
group by p.postid');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
देखें SQL Fiddle with Demo ।
दोनों परिणाम देंगे:
| POSTID | INCIDENT | LOCATION | WEAPON |
----------------------------------------------
| 1 | Murder | New Brunswick | (null) |
| 2 | Theft | (null) | Gun |