我想在我的查询中使用GROUP_CONCAT多行,没有将所有记录合并到1行。多行MySql Group_concat
我有3个表:
CREATE TABLE `StockItems` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Item` varchar(255) NOT NULL,
`SubCatID` int(11) NOT NULL,
`Qty` decimal(18,5) DEFAULT '0.00000',
`SupplierID` int(11) NOT NULL,
`PackPrice` decimal(19,4) NOT NULL,
`QtyInPack` int(11) NOT NULL,
`IndvPrice` decimal(19,4) DEFAULT NULL,
`GroupID` int(11) NOT NULL,
`Ref` varchar(255) NOT NULL DEFAULT '',
`Del` tinyint(1) NOT NULL DEFAULT '0',
`Size` int(11) DEFAULT NULL,
`Fabed` tinyint(1) NOT NULL DEFAULT '0',
`Def` tinyint(1) NOT NULL DEFAULT '1',
`PorpDef` tinyint(4) NOT NULL DEFAULT '2',
PRIMARY KEY (`ID`),
KEY `SubCatID` (`SubCatID`),
KEY `GroupID` (`GroupID`)
) ENGINE=MyISAM AUTO_INCREMENT=473 DEFAULT CHARSET=utf8;
CREATE TABLE `MTO` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`ProjID` int(11) DEFAULT NULL,
`ItemID` int(11) DEFAULT NULL,
`Size` int(11) DEFAULT NULL,
`TotalFabs` decimal(11,5) DEFAULT NULL,
`ActualFabs` decimal(10,3) NOT NULL,
`ProjectedFabs` decimal(10,3) NOT NULL,
`TotalTO` decimal(11,5) DEFAULT NULL,
`ItemName` varchar(255) DEFAULT NULL,
`TotalTS` decimal(11,5) DEFAULT NULL,
`GroupID` int(11) DEFAULT NULL,
`Fabed` int(11) NOT NULL DEFAULT '0',
`SiteOrFab` tinyint(4) NOT NULL,
`PiecePrice` decimal(8,2) NOT NULL DEFAULT '0.00',
`PorP` int(11) NOT NULL,
`Fin` tinyint(4) DEFAULT '0',
PRIMARY KEY (`ID`),
KEY `ItemID` (`ItemID`),
KEY `ProjID` (`ProjID`)
) ENGINE=MyISAM AUTO_INCREMENT=574 DEFAULT CHARSET=utf8;
CREATE TABLE `Suppliers` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Supplier` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
Suppliers Table:
ID | Supplier
------------------------
1 | Akatherm
2 | Ebero
这是我试图修改查询:(这工作)
SELECT a.ID,
a.ItemID,
IF(a.Size IS NOT NULL , CONCAT(a.ItemName, ' (', a.Size, 'm Length)') , a.ItemName) AS ItemName,
ConvPorp(a.TotalFabs,a.ItemID,a.PorP) AS TotalFabs,
a.GroupID,
ConvPorp(a.ActualFabs,a.ItemID,a.PorP) AS ActualFabs,
ConvPorp(a.ProjectedFabs,a.ItemID,a.PorP) AS ProjectedFabs,
a.Size,
a.Fabed,
a.PorP,
b.QtyInPack,
b.SupplierID,
b.SubCatID,
a.Fin,
ConvPorp(b.Qty,a.ItemID,a.PorP) AS Qty,
GetResStock(a.ItemID) As ResStock
FROM MTO a
JOIN StockItems b ON a.ItemID = b.ID
WHERE SiteOrFab=1
AND projid = 53
ORDER BY a.Fabed, b.GroupID, b.SubCatID, a.Size, a.ItemName+0, a.ItemName
所以我想要做的是有一个GROUP_CONCAT在查询结束时,对于每个记录,将给定记录的GroupID中存在的供应商列表连接起来。
这是我想要的结果:(这也是上面的工作查询,最后一列少的结果):
ID | ItemID| ItemName | TotalFabs | GroupID | ActualFabs| ProjecFabs| Size | Fabed | PorP | QtyInPack| SupplierID | SubCatID | Fin | Qty | ResStock || GROUP_CONCAT(SupplierID, SEPARATOR ',')
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
560 | 3 | 63mm Pipe (5m Length) | 10.4000 | 3 | 0.0000 | 0.0000 | 5 | 0 | 2 | 1 | 1 | 1 | 0 | 0.0000 | 12.4000 || 1,2,4,4
566 | 45 | 63mm Pipe (12m Length) | 0.7500 | 3 | 0.0000 | 0.0000 | 12 | 0 | 2 | 1 | 4 | 1 | 0 | 0.0000 | 0.9167 || 1,2,4,4
562 | 4 | 75mm Pipe (5m Length) | 1.0000 | 4 | 0.0000 | 0.0000 | 5 | 0 | 2 | 1 | 1 | 1 | 0 | 0.0000 | 1.8000 || 1,2,4,4
564 | 32 | 75mm Pipe (6m Length) | 1.5000 | 4 | 0.0000 | 0.0000 | 6 | 0 | 2 | 1 | 4 | 1 | 0 | 37.0000 | 1.8333 || 1,2,4,4
572 | 33 | 90mm Pipe (6m Length) | 1.6250 | 5 | 0.0000 | 0.0000 | 6 | 0 | 2 | 1 | 4 | 1 | 0 | 35.0000 | 0.0000 || 1,2,4,4
571 | 50 | 160mm Pipe (12m Length) | 3.0833 | 8 | 0.0000 | 0.0000 | 12 | 0 | 2 | 1 | 4 | 1 | 0 | 0.0000 | 0.0000 || 1,2,4,4
573 | 37 | 200mm Pipe (6m Length) | 6.0000 | 9 | 0.0000 | 0.0000 | 6 | 0 | 2 | 1 | 4 | 1 | 0 | 34.0000 | 0.0000 || 1,2,4,3
568 | 209 | 160/63 Branch | 24.0000 | 61 | 0.0000 | 0.0000 | NULL | 1 | 2 | 1 | 8 | 21 | 0 | 0.0000 | 0.0000 || 1,2,5
569 | 211 | 160/90 Branch | 13.0000 | 63 | 0.0000 | 0.0000 | NULL | 1 | 2 | 1 | 8 | 21 | 0 | 0.0000 | 0.0000 || 1,2
570 | 212 | 200/63 Branch | 36.0000 | 67 | 0.0000 | 0.0000 | NULL | 1 | 2 | 1 | 8 | 21 | 0 | 0.0000 | 0.0000 || 1
注意:一个项目组可以包含如果同一供应商的多个实例大小是不同的,因此为什么GROUP_CONCAT(SupplierID)包含多个实例,其中某些记录的SupplierID = 4。
我已成功地做到这一点在一个单独的查询,其中群ID输入:
SELECT GROUP_CONCAT(b.SupplierID SEPARATOR ','),
GROUP_CONCAT(c.Supplier SEPARATOR ','),
GROUP_CONCAT(b.Size SEPARATOR ','),
GROUP_CONCAT(b.ID SEPARATOR ',')
FROM StockItems b
JOIN Suppliers c
ON b.SupplierID = c.ID AND b.GroupID=5
我只是在努力寻找一种方法来追加该到我当前的查询
任何支持不胜感激!
你将需要找出哪些列(S)将用于'GROUP BY',你可能要加入一个中间返回到您当前的查询。 –