2014-02-18 47 views
0

我想組這個「虛」表柱上進行(的幾個結果加入,如果公司)MySQL的:集團colums沒有與空

表,它是如何:

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 

NULL應該掉出來。

任何想法?

到目前爲止,我嘗試過「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