私はクエリ内の複数行に対してGROUP_CONCATを使用しようとしていますが、すべてのレコードを1行にマージする必要はありません。複数行のMySql Group_concat
私は3つのテーブルがあります。だから、私は何をしようとしていることGROUP_CONCATを持っている(これは動作します)
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
:
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
これは私が修正しようとしているクエリですがレコードごとに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
非常に感謝!
を、あなたは中間に参加する必要があります結果を現在のクエリに戻します。 –