select pd.products_name,
GROUP_CONCAT(pag.customers_group_id SEPARATOR ',') group_id,
pa.`options_values_price` Retail,
GROUP_CONCAT(pag.options_values_price SEPARATOR ',') volume_and_designer
from products_attributes pa
left join products_description pd
on pa.products_id = pd.products_id and pd.language_id = '1'
left join products_attributes_groups pag
on pa.`products_attributes_id`= pag.`products_attributes_id`
where pa.products_id='225'
GROUP BY `pa`.`products_attributes_id`
ORDER BY `pa`.`products_attributes_id` ASC
上面的查询向我返回了这样的输出
| products_name | group_id | Retail | volume_and_sdesign |
-------------------------------------------------------------
| GOLD | 1,2 | 15 | 30,35 |
| SILVER | 2,1 | 16 | 40,45 |
| BRONZE | 1,2 | 17 | 50,55 |
我要实现的是在上表中再添加2个别名,以便根据group_id列将最后一列(volume_and_sdesign)分为两列(即volume,SDesign)。 1对应于体积,2对应于SDesign。
例如
Gold has group_id (1,2)
so its volume_and_sdesign (30,35) will make new columns
volume = 30
SDesign = 35
Silver has group_id (2,1)
so its volume_and_sdesign (40,45) will make new columns
volume = 45
SDesign = 40
Bronze has group_id (1,2)
so its volume_and_sdesign (50,55) will make new columns
volume = 50
SDesign = 55
因此,上表将如下所示
| products_name | group_id | Retail | volume_and_sdesign | volume | SDesign|
-------------------------------------------------------------
| GOLD | 1,2 | 15 | 30,35 |30 | 35 |
| SILVER | 2,1 | 16 | 40,45 |45 | 40 |
| BRONZE | 1,2 | 17 | 50,55 |50 | 55 |
任何帮助都感激不尽
最佳答案
您可以使用条件聚合-在聚合函数(例如case
)中为max()
:
select pd.products_name,
group_concat(pag.customers_group_id SEPARATOR ',') as group_id,
pa.`options_values_price` as Retail,
group_concat(pag.options_values_price SEPARATOR ',') as volume_and_designer,
max(case when group_id = 1 then pag.options_values_price end) as volume,
max(case when group_id = 2 then pag.options_values_price end) as SDesign
from products_attributes pa left join
products_description pd
on pa.products_id = pd.products_id and pd.language_id = '1' left join
products_attributes_groups pag
on pa.`products_attributes_id` = pag.`products_attributes_id`
where pa.products_id='225'
group by `pa`.`products_attributes_id`
order by `pa`.`products_attributes_id` ASC