[英]Mysql horizontal join, table values as columns
我有3個表格項目,item_sizes,具有以下字段的大小:
items
id
name
item_sizes
item_id
size_id
sizes
id
size
大小有以下值,例如:S,M,XL,XXL等我想加入連接或通過任何方式獲得此結果:
item_id | name | S | M | XL ...
--------------------------------------------
1 shirt 1 0 1
2 dress 0 1 1
3 jacket 1 1 1
等等。 值1表示此項目具有此大小。 是否有可能做到這一點?
SELECT a.id,
a.name,
SUM(CASE WHEN c.size = 'S' THEN 1 ELSE 0 END) `S`,
SUM(CASE WHEN c.size = 'M' THEN 1 ELSE 0 END) `M`,
SUM(CASE WHEN c.size = 'L' THEN 1 ELSE 0 END) `L`,
SUM(CASE WHEN c.size = 'XL' THEN 1 ELSE 0 END) `XL`,
SUM(CASE WHEN c.size = 'XXL' THEN 1 ELSE 0 END) `XXL`
FROM items a
LEFT JOIN item_sizes b
ON a.id = b.item_id
LEFT JOIN sizes c
ON b.size_ID = c.id
GROUP BY a.id, a.name
使用PreparedStatament
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM(CASE WHEN c.size = ''',
size,
''' then 1 ELSE 0 end) AS ',
size
)
) INTO @sql
FROM sizes;
SET @sql = CONCAT('SELECT a.id,
a.name, ', @sql, '
FROM items a
LEFT JOIN item_sizes b
ON a.id = b.item_id
LEFT JOIN sizes c
ON b.size_ID = c.id
GROUP BY a.id, a.name');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.