选择LEFT OUTER JOIN并以逗号分隔列表返回

时间:2018-05-27 21:38:18

标签: sql sql-server-2008 tsql left-join string-aggregation

在MS SQL Server 2008上,如何创建一个连接两个表的select语句,并将表2的内容作为逗号分隔列表返回?

实施例: 表1包含我的所有订单,表2包含我的订单行。 我想从订单中选择所有字段,以及相应订单行中所有字段的逗号分隔列表,每个订单行用分号(或其他)分隔。

这样的事情:

| Orders.custno | Orders.name | Orders.email     | Orders.phone | Order lines                                                         |
|---------------|-------------|------------------|--------------|---------------------------------------------------------------------|
| 123456        | Dave        | dave@example.com | 1234567890   | “112233”,”Running shoes”,”495.00”;”223344”,”Roller blades”,”699.00” |

希望这是有道理的。

感谢。

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,那么下面是解决方案 SQLFiddler

SELECT p.productId,p.ProductName,tmp.List_output
FROM product p
LEFT OUTER JOIN 
(
SELECT  ProductId
       ,STUFF((SELECT ', ' + CAST(ProductLine AS VARCHAR(10)) [text()]
         FROM ProductLine 
         WHERE ProductId = t.ProductId
         FOR XML PATH(''), TYPE)
        .value('.','NVARCHAR(MAX)'),1,2,' ') List_Output
FROM ProductLine t
GROUP BY ProductId) tmp ON tmp.ProductId = p.ProductId