首页 > 解决方案 > 如何将多行连接成一个

问题描述

使用 SQL 2008 R2 我有两个表,想创建一个表,如:

输出

输入表 输入表 1

输入输出表 2

我尝试过使用 stuff 功能

SELECT o.DEPT_ID,o.CLIENT_ID,
       code,
       (STUFF((SELECT CAST(', ' + CODE AS VARCHAR(MAX)) 
         FROM ORDERS
         WHERE (o.FUNDER_ID = f.FUNDER_ID) 
         FOR XML PATH ('')), 1, 2, '')) AS funder_code
FROM FUNDERS f
join ORDERS o on o.FUNDER_ID=f.FUNDER_ID 
where o.DEPT_ID=111 and CLIENT_ID='B001'

而且我没有得到输出。

标签: sql-server-2008outputconcatenation

解决方案


首先,您所需的输出似乎将第二个输入表中的“名称”列作为逗号分隔的列表,但您的代码暗示您希望将“代码”列连接起来。此解决方案连接“名称”列。

其次,查看您的输入表,您不能直接使用join ORDERS o on o.FUNDER_ID=f.FUNDER_ID,因为'B0000000019'不等于'F19'。但是,一旦您操作了这些列以便可以连接它们,请尝试以下操作:

SELECT DISTINCT o.dept_id, o.client_id
    ,(STUFF((SELECT distinct CAST(', ' + name AS VARCHAR(MAX)) 
         FROM FUNDERS f
         JOIN ORDERS o2 ON o2.funder_id = f.funder_id
         FOR XML PATH ('')), 1, 2, '')) AS funder_code
FROM ORDERS o

推荐阅读