SQL 对来自联接的列数据进行分组

SQL Group column data from joins

我在编写 SQL 查询方面需要一些帮助。

我有以下格式的数据来自通过连接多个 tables 返回的查询。

CustID  Name    AccNo       Bank
------  ----    -----       -----
 1      Varun   9848032919    CB
 1      Varun   9998887771   COB
 1      Varun   9988776655    CB
 2      Lokesh  9876543210   COB
 2      Lokesh  9282726252    CB
 3      aaaa    9181716151   COB

我希望数据的格式如下所示,以便于加载到 Crystal 报告中。

CustID  Name               AccNo                      Bank
------  ----               -----                      -----
  1     Varun   9848032919,9998887771,9988776655      CB,COB,CB
  2     Lokesh  9876543210,9282726252                 COB,CB
  3     aaaa    9181716151                            COB

我查看了其他建议使用 STUFF、XML PATH() 的答案,但它们仅适用于数据来自一个 table 的情况。在我的场景中,数据是通过加入多个 tables.

来检索的

我可以知道如何根据需要按 CustID 分组并连接其他列中的数据吗?

非常感谢您的宝贵时间!!!

编辑:我正在寻找 SQL Server 2005 版本的答案

包装 select 使其看起来像一个简单的 table。您可以对结果应用逻辑。 喜欢

Select a.* 
      from (select t1.col1, t2.col2 
             from table1 t1 
             join table2 t2 on t1.f1=t2.c1) a

您可以将查询放在 CTE 中,然后像这样在 CTE 上应用 FOR XML PATH

;WITH CTE AS (
  ... your query here
)
SELECT C.CustID, MAX(Name),
       STUFF((
          SELECT ', ' + + CAST(AccNo AS VARCHAR(MAX)) 
          FROM CTE 
          WHERE (CustID = C.CustID) 
          FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
       ,1,2,'') AS AccNo,
        STUFF((
           SELECT ', ' + + CAST(Bank AS VARCHAR(MAX)) 
           FROM CTE 
           WHERE (CustID = C.CustID) 
           FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
        ,1,2,'') AS Bank
FROM CTE C
GROUP BY C.CustID