PIVOT
を実行する必要があります (他のRDBMSとは異なり)MySQLではネイティブにサポートされていない操作。
最も近い方法は、次の行に沿ってSQLを作成することです。
SELECT ProductId,
GROUP_CONCAT(IF(Name='Brand Name' ,value,NULL))
AS `Brand Name`,
GROUP_CONCAT(IF(Name='Ethernet Technology' ,value,NULL))
AS `Ethernet Technology`,
GROUP_CONCAT(IF(Name='Form Factor' ,value,NULL))
AS `Form Factor`,
GROUP_CONCAT(IF(Name='Media Type Supported',value,NULL))
AS `Media Type Supported`
FROM search_export
GROUP BY ProductId
可能であればName
値は動的であるため、次の結果から高級言語でこのようなSQLを生成できます。
SELECT DISTINCT Name FROM search_export
実際、SQL自体を使用することもできます:
SELECT CONCAT('
SELECT ProductId, ',
GROUP_CONCAT('
GROUP_CONCAT(IF(Name=',QUOTE(Name),',value,NULL))
AS `',REPLACE(Name,'`','``'),'`'
), '
FROM search_export
GROUP BY ProductId
')
INTO @sql
FROM (
SELECT DISTINCT Name FROM search_export
) t;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
異なるName
がたくさんある場合は注意してください 値を増やす必要がある場合は、 group_concat_max_len コード>
デフォルトの1KiBから。