簡體   English   中英

MySQL:將沒有列的列分組為null

[英]MySQL: Group columns without column with null

我正在嘗試對這個“虛構”表進行分組(幾次聯接和if的結果)

表,如何:

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

將查詢更改為聚合查詢,並在列上使用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`; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM