I have a query that is returning data similar to the following:
| po_line.line_no (PO Line #) | oe_line_po.order_number (Sales order #) |
|---|---|
| 1 | A |
| 1 | B |
| 1 | C |
| 2 | D |
| 3 | E |
| 3 | F |
| 4 | null |
Some of our po_line.line_no values correspond to multiple oe_line_po.order_number values (could be any number of sales orders), and when we order extra stock they don't correspond to a oe_line_po.order_number value at all. Is there any way that I can concatenate them in the SQL definition to avoid creating multiple rows for each po_line.line_no that has multiple oe_line_po.order_number values? I'm looking to produce something like this:
| po_line.line_no (PO Line #) | oe_line_po.order_number (Sales order #) |
|---|---|
| 1 | A,B,C |
| 2 | D |
| 3 | E,F |
| 4 | null |
The goal is to prevent having to create a separate query and use a lookup in Excel. Here's the definition for reference, since some of the joins are left joins! The problem is also tied to oe_hdr.po_no and oe_line.extended_desc since those are also fields tied to the sales order.
SELECT
po_hdr.po_type AS 'Disposition',
contacts.first_name AS 'Buyer Name',
po_hdr.order_date AS 'PO Date',
po_hdr.po_no AS 'PO Number',
po_line.line_no AS 'PO Line Number',
po_hdr.external_po_no AS 'PO External PO #',
oe_hdr.po_no AS 'SO External PO #',
po_hdr.supplier_id AS 'Supplier ID',
supplier.supplier_name AS 'Supplier Name',
supplier.average_lead_time AS 'Supplier Average Lead Time',
inv_mast.item_id AS 'Item ID',
po_line.item_description AS 'Item Description',
po_line.extended_desc AS 'PO Extended Description',
oe_line.extended_desc AS 'SO Extended Description',
inv_mast.extended_desc AS 'Item Extended Description',
po_line.unit_price AS 'Unit Cost',
po_line.unit_price AS 'Unit Price', po_line.qty_ordered AS 'Quantity Ordered',
po_line.qty_received AS 'Quantity Received',
supplier_ud.where_to_check AS 'Primary Rep Email',
supplier_ud.customer_service_email AS 'Status Email',
supplier_ud.online_tracking AS 'Online Tracking?',
supplier_ud.online_status AS 'Online Status URL',
supplier_ud.username_pw AS 'Username/PW'
FROM
P21.dbo.contacts contacts,
P21.dbo.inv_mast inv_mast,
P21.dbo.po_hdr po_hdr,
P21.dbo.supplier supplier,
P21.dbo.supplier_ud supplier_ud,
P21.dbo.po_line po_line
LEFT JOIN P21.dbo.oe_line_po oe_line_po
ON po_line.line_no = oe_line_po.po_line_number
AND (oe_line_po.po_no = po_line.po_no)
LEFT JOIN P21.dbo.oe_line oe_line
ON oe_line_po.order_number = oe_line.order_no
AND (oe_line_po.line_number = oe_line.line_no)
LEFT JOIN P21.dbo.oe_hdr oe_hdr
ON oe_line.order_no = oe_hdr.order_no
WHERE
po_hdr.po_no = po_line.po_no AND
po_hdr.supplier_id = supplier.supplier_id AND
po_hdr.requested_by = contacts.id AND
inv_mast.inv_mast_uid = po_line.inv_mast_uid AND
supplier_ud.supplier_id = supplier.supplier_id
AND
((po_line.cancel_flag='N') AND
(po_line.complete='N') AND
(po_hdr.location_id<>20) AND
(po_hdr.order_date<(GETDATE()-0)) AND
ORDER BY
supplier.supplier_name, po_hdr.po_no, po_line.line_no