我需要转换我的查询结果,所以具有相同外键的多行只是一行。我可以通过分组来做到这一点。问题是,在我的一个专栏中,我想连接一些具有不同分组的列。例如,我的表包含这样的 somting:
shopId Brand Category Color QTY
----------------------------------------------
15 Dell NoteBook Red 5
15 Dell NoteBook Blue 1
15 HP NoteBook red 2
15 HP NetBook red 3
14 Sony NoteBook yellow 1
14 Acer Tablet red 10
Brand、Category 和 Color 都从它们的外键中检索到。我想呈现这个结果
ShopId Dell Color HP Color etc...
-----------------------------------------------------------
15 6 red:5, Blue:1 2 red:2
14 ..............
在我的查询中,我按 shopId 对它们进行分组,并使用 sum 和 case 语句查找每个品牌和类别的总数量是一件容易的事。我的问题是如何连接商店、类别、品牌分组的颜色和数量(总分组是按 shopId 而不是商店、类别、品牌)?
我的表是
创建表`shopstorage`( `color` int(11) NOT NULL, `category` int(11) NOT NULL, `brand` int(11) NOT NULL, `shop` int(11) NOT NULL, `date` 日期不为空, `qty` tinyint(4) 非空, PRIMARY KEY (`color`,`category`,`brand`,`shop`,`date`), KEY `clrEpClr` (`color`), KEY `clrEpCat` (`category`), KEY `clrEpshop` (`shop`), KEY `clrEpBrand`(`品牌`), CONSTRAINT `SSBrand` FOREIGN KEY (`brand`) REFERENCES `brand` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, 约束 `SSCat` 外键 (`category`) 参考 `productcategory` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, 约束 `SSClr` 外键 (`color`) 参考 `color` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, 约束 `SSShop` 外键 (`shop`) 参考 `shop` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) 引擎=InnoDB 默认字符集=utf8
我的不完整查询是
选择 shop.name, shop.floor, shop.no, 总和(当brand.name ='ASUS' and productcategory.name='NoteBook' then shopstorage.qty else 0 end)作为华硕, 总和(当brand.name ='HP'和productcategory.name='NoteBook'然后shopstorage.qty else 0结束时)作为HP, 总和(当brand.name ='Sony'和productcategory.name='NoteBook'然后shopstorage.qty else 0结束时)作为索尼, 总和(当brand.name ='Dell'和productcategory.name='NoteBook'然后shopstorage.qty else 0结束时)作为戴尔, 总和(当brand.name ='ASUS' and productcategory.name='NetBook' then shopstorage.qty else 0 end)作为华硕, 总和(当brand.name ='HP' and productcategory.name='NetBook' then shopstorage.qty else 0 end)作为HP, 总和(当brand.name ='Sony'和productcategory.name='NetBook'然后shopstorage.qty else 0结束时)作为索尼, sum(当brand.name ='Dell'和productcategory.name='NetBook'然后shopstorage.qty else 0结束时)作为戴尔, 总和(当brand.name ='ASUS' and productcategory.name='Tablet' then storestorage.qty else 0 end)作为华硕, 总和(当brand.name ='HP' and productcategory.name='Tablet' then stores.qty else 0 end)作为HP, sum(当brand.name ='Sony'和productcategory.name='Tablet'然后shopstorage.qty else 0结束时)作为索尼, 总和(当brand.name ='Dell' and productcategory.name='Tablet' then storesstorage.qty else 0 end)作为戴尔 从商店存储 在 shoptorage.brand=brand.id 上加入品牌 在 shoptorage.color=color.id 上加入颜色 在 shoptorage.category=productcategory.id 上加入产品类别 在 shop.id = shopstorage.shop 上加入商店 按商店storage.shop 分组
我正在寻找一种在每次总和后添加一列以指定每种颜色数量的方法,例如,如果 HP 为 15,它有 7 个红色和 8 个蓝色笔记本。我尝试了 GROUP_Concat 但由于分组错误,它没有显示正确的结果。