首页 > 解决方案 > 使用 LEFT OUTER JOIN 选择并以逗号分隔的列表形式返回

问题描述

在 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” |

希望这是有道理的。

谢谢。

标签: sqlsql-server-2008tsqlleft-joinstring-aggregation

解决方案


如果我正确理解您的问题,那么下面是解决方案 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 

推荐阅读