[英]MySql split an alias into multiple columns
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 |
任何幫助都感激不盡
您可以使用條件聚合 - 在聚合函數(例如max()
中就是case
:
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
這可以使用LEFT
, RIGHT
和SUBSTRING_INDEX
來實現。
嘗試這個:
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,
IF(LEFT(group_id,1) = 1, SUBSTRING_INDEX(volume_and_designer, ',', 1), SUBSTRING_INDEX(volume_and_designer, ',', -1)) as volume,
IF(RIGHT(group_id,1) = 1, SUBSTRING_INDEX(volume_and_designer, ',', 1), SUBSTRING_INDEX(volume_and_designer, ',', -1)) 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.