1

可能重复:
有没有办法创建一个 SQL Server 函数来将子查询中的多行“连接”到单个分隔字段中?

我有一个这样的表:

客户定制
------------
一个 1
b 2
b 3
c 4
c 5
c 6

我想将上面的非规范化为以下形式

客户定制
---------------
一个 1
b 2|3
c 4|5|6

请注意,acc 列现在应该包含任何客户的以竖线分隔的帐户列表。此外,客户的可能帐户数量也可以是可变的。

如何使用 SQL 做到这一点?

4

3 回答 3

3

试试这个:

SELECT cust, acc = 
    STUFF((SELECT '| ' +CAST( acc as varchar(20))
           FROM <table> b 
           WHERE b.cust = a.cust 
          FOR XML PATH('')), 1, 2, '')
FROM <table> a
GROUP BY cust


SQL 小提琴演示

于 2012-08-22T09:43:35.223 回答
1

如果您想按 Cust 分组(类似于Group_ConcateMySQL),SQL Server 中没有任何方法。所以试试这个:

SELECT * FROM (
        SELECT  DISTINCT cust
        FROM    t
        ) table2
    CROSS APPLY
        (SELECT  CASE ROW_NUMBER() 
          OVER(ORDER BY acc) 
          WHEN 1 THEN '' ELSE ' | ' END + 
          (cast(acc as varchar))
        FROM    t table3
        WHERE   table3.cust = table2.cust
        ORDER BY acc
        FOR XML PATH ('')
        ) table3(acc)

看到这个 SQLFiddle

另见:Group columns into multiple rows and Group_concate like MySQL in SQL Server

于 2012-08-22T09:58:52.307 回答
0

试试这个:

 select cust,
STUFF((select '|'+cast(acc as varchar) from c1 where c1.cust = c2.cust for XML   path('')),1,1,'') as acc from c1 c2
group by cust 
于 2012-08-22T09:54:00.757 回答