如何组合单个列的多行中的值

时间:2018-01-23 12:34:24

标签: sql sql-server

我有一张包含银行账户的表格,其中包含许多相同数量的副本,如:

SELECT
    k1.Account_number, COUNT(*) as Counter
FROM
    Customers k1
GROUP BY
    k1.Account_number
HAVING 
    COUNT(*) > 1
order by Counter

给出:

Account_number                         Counter
DE1234567891234566786545                  3
FR8734280472398472394823                  4
IT48723849y3294723493284                  4
IT3543534534423421321323                  4
FR4798237492864239847329                  6
FR4723984793284723984732                  7

我需要的是再添加一个列,其中包含拥有此帐户的客户数量。 我试过这个:

STUFF((select '; ' + Customer_name from Customers FOR XML PATH('')),1,1,'') [Some_column]

但是它把所有客户都放在那张桌子上:(

2 个答案:

答案 0 :(得分:1)

您需要子查询中的关联子句:

SELECT k1.Account_number, COUNT(*) as Counter,
       STUFF( (SELECT '; ' + c2.Customer_name 
               FROM Customers c2
               WHERE c2.Account_number = k1.Account_Number
               FOR XML PATH('')
              ), 1, 1, ''
            ) as Customers
FROM Customers k1
GROUP BY k1.Account_number
HAVING COUNT(*) > 1
ORDER BY Counter

答案 1 :(得分:0)

它可能适合你

SELECT
    k1.Account_number, COUNT(*) as Counter
    ,STUFF((SELECT ','+Customer_name FROM Customers K2 WHERE K2.Account_number= k1.Account_number FOR XML PATH('')),1,1,'')
FROM
    Customers k1
GROUP BY
    k1.Account_number
HAVING 
    COUNT(*) > 1
order by Counter