2016-03-31 7 views
1
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 

Die obige Abfrage mir eine Ausgabe wie dieseMySql aufspalten einen Alias ​​in mehrere Spalten

| 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   | 

zurückgeben, was ich erreichen will, ist oben, so dass die letzte Spalte (volume_and_sdesign) 2 weitere Aliase in der Tabelle hinzufügen ist gemäß der Spalte group_id in zwei Spalten (dh Volume, SDesign) unterteilt. 1 entspricht dem Volumen und 2 entsprechen SDesign.

zB

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 

so, die obige Tabelle wie diese

| 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  | 

aussehen Jede Hilfe wird viel

Antwort

0

geschätzt werden können Sie bedingte Aggregation verwenden - das ist case innerhalb eines Aggregationsfunktion wie 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 
+0

wie ein Zauber! Vielen Dank –

0

Dies kann unter Verwendung von LEFT, RIGHT und SUBSTRING_INDEX erreicht werden.

Versuchen Sie folgendes:

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