Мне нужно преобразовать результат моего запроса, чтобы несколько строк с одинаковым внешним ключом были всего одной строкой. Я могу сделать это с помощью группировки. проблема в том, что в одном из моих столбцов я хочу объединить несколько столбцов с разной группировкой. например, в моей таблице есть такие вещи:
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
Бренд, Категория и Цвет - все извлекаются из их внешних ключей. Я хочу представить этот результат как
ShopId Dell Color HP Color etc...
-----------------------------------------------------------
15 6 red:5, Blue:1 2 red:2
14 ..............
в своем запросе я сгруппировал их по идентификатору магазина, и найти общее количество для каждой марки и категории с помощью суммы и статистики было несложной задачей. Моя проблема в том, как я могу объединить цвет и количество для магазина, категории, группы брендов (общая группировка выполняется по shopId, а не по магазину, категории, бренду)?
Моя таблица
CREATE TABLE `shopstorage` ( `color` int(11) NOT NULL, `category` int(11) NOT NULL, `brand` int(11) NOT NULL, `shop` int(11) NOT NULL, `date` date NOT NULL, `qty` tinyint(4) NOT NULL, PRIMARY KEY (`color`,`category`,`brand`,`shop`,`date`), KEY `clrEpClr` (`color`), KEY `clrEpCat` (`category`), KEY `clrEpshop` (`shop`), KEY `clrEpBrand` (`brand`), CONSTRAINT `SSBrand` FOREIGN KEY (`brand`) REFERENCES `brand` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `SSCat` FOREIGN KEY (`category`) REFERENCES `productcategory` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `SSClr` FOREIGN KEY (`color`) REFERENCES `color` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `SSShop` FOREIGN KEY (`shop`) REFERENCES `shop` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB DEFAULT CHARSET=utf8
и мой неполный запрос
select shop.name, shop.floor, shop.no, sum(case when brand.name ='ASUS' and productcategory.name='NoteBook' then shopstorage.qty else 0 end) as ASUS, sum(case when brand.name ='HP' and productcategory.name='NoteBook' then shopstorage.qty else 0 end) as HP, sum(case when brand.name ='Sony' and productcategory.name='NoteBook' then shopstorage.qty else 0 end) as Sony, sum(case when brand.name ='Dell' and productcategory.name='NoteBook' then shopstorage.qty else 0 end) as Dell, sum(case when brand.name ='ASUS' and productcategory.name='NetBook' then shopstorage.qty else 0 end) as ASUS, sum(case when brand.name ='HP' and productcategory.name='NetBook' then shopstorage.qty else 0 end) as HP, sum(case when brand.name ='Sony' and productcategory.name='NetBook' then shopstorage.qty else 0 end) as Sony, sum(case when brand.name ='Dell' and productcategory.name='NetBook' then shopstorage.qty else 0 end) as Dell, sum(case when brand.name ='ASUS' and productcategory.name='Tablet' then shopstorage.qty else 0 end) as ASUS, sum(case when brand.name ='HP' and productcategory.name='Tablet' then shopstorage.qty else 0 end) as HP, sum(case when brand.name ='Sony' and productcategory.name='Tablet' then shopstorage.qty else 0 end) as Sony, sum(case when brand.name ='Dell' and productcategory.name='Tablet' then shopstorage.qty else 0 end) as Dell from shopstorage join brand on shopstorage.brand=brand.id join color on shopstorage.color=color.id join productcategory on shopstorage.category=productcategory.id join shop on shop.id = shopstorage.shop group by shopstorage.shop
Я ищу способ добавить столбец после каждой суммы для указания количества каждого цвета, например, если HP равно 15 У него есть 7 красных и 8 синих ноутбуков. Я попробовал GROUP_Concat, но он не показывал правильный результат из-за неправильной группировки.
SHOW CREATE TABLE your_table
) и ваш запрос на данный момент. - person Jocelyn   schedule 13.08.2012,group_concat(case when brand.name='{$brand['name']}' and category={$category['id']} then concat(color.name,':',num) end) as {$brand['name']}C
в моем коде после каждой суммы, и он сделал трехколесный велосипед: D - person Soheil   schedule 14.08.2012