我正在尝试将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。
我已经设法在输入GroupID的单独查询中执行此操作:
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
我正在努力寻找一种方法将其附加到我当前的查询
非常感谢任何支持!
答案 0 :(得分:3)
我认为您只需要DISTINCT
关键字:
GROUP_CONCAT(DISTINCT b.SupplierID SEPARATOR ',')