2014-02-18 4 views
0

Пытаюсь группа это «мнимой» таблица (результат нескольких соединений, и если х)MySQL: Группа colums без Colum с нулевой

Таблицы, как это:

ProductID PriceForOneYear PriceForTwoYears PriceForThreeYears PriceForFourYears PriceForFiveYears 
1   1.00   NULL    NULL    NULL    NULL 
1   NULL   1.50    NULL    NULL    NULL 
1   NULL   NULL    2.00    NULL    NULL 
1   NULL   NULL    NULL    2.50    NULL 
1   NULL   NULL    NULL    NULL    3.00 
2   5.00   NULL    NULL    NULL    NULL 
2   NULL   5.50    NULL    NULL    NULL 
2   NULL   NULL    6.00    NULL    NULL 
2   NULL   NULL    NULL    6.50    NULL 
2   NULL   NULL    NULL    NULL    7.00 

стола, как это должно быть:

ProductID PriceForOneYear PriceForTwoYears PriceForThreeYears PriceForFourYears PriceForFiveYears 
1   1.00   1.50    2.00    2.50    3.00 
2   5.00   5.50    6.00    6.50    7.00 

НУЛЛ должен выпасть.

Любая идея?

Я пробовал «GROUP BY ..» и GROUP_CONCATE (DISTINCT ..) до сих пор.

запроса, который создает свою "воображаемый стол":

SELECT 
`tblproducts`.`id` AS `productid`, 
IF(`tblproductconfigoptionssub`.`optionname` = '1', `tblpricing`.`monthly`, NULL) AS `priceforoneyear`, 
IF(`tblproductconfigoptionssub`.`optionname` = '2', ROUND(`tblpricing`.`monthly`/2, 2), NULL) AS `pricefortwoyears`, 
IF(`tblproductconfigoptionssub`.`optionname` = '3', ROUND(`tblpricing`.`monthly`/3, 2), NULL) AS `priceforthreeyears`, 
IF(`tblproductconfigoptionssub`.`optionname` = '4', ROUND(`tblpricing`.`monthly`/4, 2), NULL) AS `priceforfouryears`, 
IF(`tblproductconfigoptionssub`.`optionname` = '5', ROUND(`tblpricing`.`monthly`/5, 2), NULL) AS `priceforfiveyears` 
FROM `tblproducts` INNER JOIN `tblproductconfigoptionssub` ON `tblproducts`.`id` = `tblproductconfigoptionssub`.`configid` INNER JOIN `tblpricing` ON `tblproductconfigoptionssub`.`id` = `tblpricing`.`relid` WHERE `tblproducts`.`gid` = '1' AND `tblpricing`.`type` = 'configoptions'; 
+0

Используйте 'COALESCE'. – Wrikken

ответ

1

Изменить запрос запроса агрегации и использовать max() на колоннах:

SELECT `tblproducts`.`id` AS `productid`, 
     max(IF(`tblproductconfigoptionssub`.`optionname` = '1', `tblpricing`.`monthly`, NULL)) AS `priceforoneyear`, 
     max(IF(`tblproductconfigoptionssub`.`optionname` = '2', ROUND(`tblpricing`.`monthly`/2, 2), NULL)) AS `pricefortwoyears`, 
     max(IF(`tblproductconfigoptionssub`.`optionname` = '3', ROUND(`tblpricing`.`monthly`/3, 2), NULL)) AS `priceforthreeyears`, 
     max(IF(`tblproductconfigoptionssub`.`optionname` = '4', ROUND(`tblpricing`.`monthly`/4, 2), NULL)) AS `priceforfouryears`, 
     max(IF(`tblproductconfigoptionssub`.`optionname` = '5', ROUND(`tblpricing`.`monthly`/5, 2), NULL)) AS `priceforfiveyears` 
FROM `tblproducts` INNER JOIN 
    `tblproductconfigoptionssub` 
    ON `tblproducts`.`id` = `tblproductconfigoptionssub`.`configid` INNER JOIN 
    `tblpricing` 
    ON `tblproductconfigoptionssub`.`id` = `tblpricing`.`relid` 
WHERE `tblproducts`.`gid` = '1' AND `tblpricing`.`type` = 'configoptions' 
GROUP BY `tblproducts`.`id`; 
+0

Отлично! Спасибо. – Hativ

Смежные вопросы