首页 > 解决方案 > SQL将多行查询为具有JOIN的单行

问题描述

我正在尝试将多行组合成一个包含JOIN. 我不知道如何让这JOIN件作品发挥作用。

我在 SQL Server 2014 上。

这件作品很好用,我根据以下内容将行滚动成一个逗号分隔的行ID_REVIEW

SELECT DISTINCT
      ID_REVIEW
      , STUFF((
      SELECT N', ' + CAST(AREA_ID AS VARCHAR(255))
      FROM AREA_ASSOC t2
      WHERE t1.ID_REVIEW = t2.ID
      FOR XML PATH('')
    ), 1, 1, '') AS AREA_ID
FROM REQUEST_WORKLOAD t1

结果:

ID_REVIEW | AREA_ID
-----------------
    11438 | 2
    23501 | 10, 15
    44677 | 8

我想做的不是显示数字,而是AREA_ID显示该区域的名称。目标是:

ID_REVIEW | AREA_NM
-----------------
    11438 | State St.
    23501 | Main St., Second St.
    44677 | Adams Ave.

AREA_NM信息包含在另一个名为 的表中AREA。在一个单独的查询中,我可以做一个LEFT JOINon tableAREA_ASSOC来拉入AREA_NM

SELECT DISTINCT
    [AREA_NM]
    FROM AREA_ASSOC 
    LEFT JOIN AREA ON
    AREA_ASSOC.AREA_ID = AREA.AREA_ID

我不知道如何将它JOIN放入STUFF函数中,以便获得区域名称。有没有办法做到这一点?

标签: sqlsql-server

解决方案


join子查询中执行:

SELECT DISTINCT r2.ID_REVIEW,
      STUFF( (SELECT N', ' + a2AREA_NM 
              FROM AREA_ASSOC aa2 JOIN
                   AREA a
                   ON aa2.AREA_ID = A.AREA_ID
              WHERE aa2.ID_REVIEW = r2.ID
              FOR XML PATH('')
             ), 1, 2, ''
           ) AS AREA_ID
FROM REQUEST_WORKLOAD rw

推荐阅读