Hi narcism, ok, on fishbowl I have set up a kit of parts for example the kit is called PC and that kit contains the following: 1 x Custom built PC 1 x UK power lead 1 x HDMI cable 1 x 23" Monitor 1 x USB keyboard 1 x USB mouse Now, when I add this kit to a sales order in fishbowl, I have set it to show kit title only (PC). So a typical SO might look like this: ITEM No. Part Number Description Qty Price 1 PC Custom PC 1 £899.99 2 Warranty 3yr Extended 1 £65.50 So when I run my report it shows the Order number etc and the items on the SO but it lists all of the kit items (pc, monitor, leads etc) and I only want it to show the kit title (PC).... Hope that makes sense... Here's the SQL: SELECT $P!{cbGroupBy} AS GROUPBY, LOCATIONGROUP.NAME AS LG, CUSTOMER.NAME AS CUSTOMER, SO.NUM AS SO, SO.DATEISSUED, SOSTATUS.NAME AS STATUS, so.salesman AS "user", SOITEM.PRODUCTNUM AS PRODUCTNUM, UOM.CODE AS SOITEMUOMCODE, SOITEMSTATUS.NAME AS SOITEMSTATUS, SOITEM.DESCRIPTION, SOITEM.ID AS ITEMID, (SOITEM.unitprice * soitem.qtytofulfill) AS OPRICE, (SOITEM.QTYTOFULFILL) AS QTYTOFULFILL, ROUND(((SOITEM.QTYFULFILLED * SOITEM.UNITPRICE) + ((CASE SOITEM.QTYTOFULFILL WHEN 0 THEN 0 ELSE SOITEM.ADJUSTAMOUNT / SOITEM.QTYTOFULFILL END) * SOITEM.QTYFULFILLED))*10, 1)/10 AS FPRICE, MIN(SOITEM.DATESCHEDULEDFULFILLMENT) AS DATESCHEDULEDFULFILLMENT, SO.datefirstship AS ITEMFULFILLMENT, MIN(SO.DATEISSUED) AS MINDATEISSUED, SORDER.ORDERED, SORDER.SHIPPED, POSTSO.POSTDATE, SO.DATEISSUED, CURRENCY.SYMBOL, SO.CUSTOMERPO FROM so INNER JOIN locationgroup ON locationgroup.id = so.locationgroupid INNER JOIN customer ON customer.id = so.customerid INNER JOIN sostatus ON sostatus.id = so.statusid INNER JOIN soitem ON soitem.soid = so.id JOIN qbclass ON qbclass.id = so.qbclassid LEFT JOIN currency ON currency.homeCurrency = 1 LEFT JOIN (SELECT postso.soid AS soid, max(postso.postdate) AS postdate FROM postso WHERE postso.postdate BETWEEN $P{dateRange1} AND $P{dateRange2} GROUP BY 1) AS postso ON so.id = postso.soid INNER JOIN uom ON uom.id = soitem.uomid INNER JOIN soitemstatus ON soitem.statusid = soitemstatus.id INNER JOIN (SELECT SUM((soitem.unitprice * soitem.qtytofulfill) + soitem.adjustamount) AS ordered, SUM(ROUND(((soitem.qtyfulfilled * soitem.unitprice) + ((CASE soitem.qtytofulfill WHEN 0 THEN 0 ELSE soitem.adjustamount / soitem.qtytofulfill END) * soitem.qtyfulfilled))*10, 1)/10) AS shipped, soitem.soid FROM soitem WHERE soitem.typeid IN (10,11,12,$P!{ckIncludeReturns},21,30,31,50,60,80) GROUP BY soitem.soid) sorder ON so.id = sorder.soid WHERE soitem.typeid IN (10,11,12,$P!{ckIncludeReturns},21,30,31,50,60,80) AND so.locationgroupid IN ($P!{locationGroupID}) AND so.customerid LIKE $P{customerID} AND soitem.qbclassid LIKE $P{qbClassID} AND UPPER(so.salesman) LIKE UPPER($P{salesPerson}) AND so.statusid IN ($P{ckEstimate},$P{ckIssued},$P{ckInProgress},$P{ckFulfilled},$P{ckClosedShort},$P{ckVoided},$P{ckExpired}) AND $P!{cbApplyDateFilter} BETWEEN $P{dateRange1} AND DATE_SUB($P{dateRange2}, INTERVAL 1 SECOND) AND soitem.productnum LIKE $P{productNum} GROUP BY so.num, locationgroup.name, customer.name, so.dateissued, so.statusid, sostatus.name, so.salesman, soitem.productnum, uom.code, soitemstatus.name, sorder.ordered, itemfulfillment, sorder.shipped, soitem.description, soitem.id, soitem.totalprice, soitem.qtytofulfill, soitem.qtyfulfilled, soitem.unitprice, soitem.adjustamount, postso.postdate, qbclass.name, currency.symbol ORDER BY 1, locationgroup.name, (CASE WHEN $P!{ckOrderByCustomer} = 1 THEN customer.name ELSE SO.NUM END), SO.NUM