1

重複の可能性:
サブクエリからの複数の行を単一の区切りフィールドに「結合」するSQL Server関数を作成する方法はありますか?

私はこのような表を持っています:

cust acc
-----------
a 1
b 2
b 3
c 4
c 5
c 6

上記を非正規化して次の形式にしたい

cust acc
---------------
a 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 (MySQL のようなものGroup_Concate) でグループ化する場合、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を参照してください

これも参照してください:列を複数の行にグループ化し、SQL Server の MySQL のように Group_concate する

于 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 に答える