首页 > 解决方案 > 多个 ID 在同一列中的查找名称

问题描述

我正在处理一些看起来像这样的数据,在 Customer 表中(还有其他列):

客户ID 产品编号
11111 256,389
11112 789,564,468

还有一个产品表,其中包含产品 ID 和产品名称(以及其他列)

我需要编写一个查询,它将构成视图的基础,它基本上用产品 ID 代替产品名称,但将其保存为一列中的逗号分隔列表,因此输出将如下所示:

客户ID 产品
11111 苹果、橙子
11112 梨、香蕉、甜瓜

我知道这看起来很可怕,而且我还有其他表格使用 cross_apply 将每个产品分开到每一行,但客户也希望看到这样的数据。

标签: sqlsql-servertsql

解决方案


我准备了一个例子,希望能满足你的需要

DECLARE @Tbl1 TABLE(ID INT, Value INT)
INSERT INTO @Tbl1 VALUES (1,100),(1,200),(1,300),(1,400)

SELECT  ID
       ,STUFF((SELECT ', ' + CAST(Value AS VARCHAR(10)) [text()]
         FROM @Tbl1 
         WHERE ID = t.ID
         FOR XML PATH(''), TYPE)
        .value('.','NVARCHAR(MAX)'),1,2,' ') Value
FROM @Tbl1 t
GROUP BY ID

推荐阅读