2012-04-10 229 views
4

组选定的,我有这样的的Sql通过和字符串连接

ID NAME Amount 
1 cal  100 
2 cal  200 
3 cal  300 
4 cal  400 
1 ser  500 
2 ser  600 
5 ser  700 

表我想写一个选择查询,这样我西港岛线得到这样

ID NAME   Amount 
1 cal and ser  600 
2 cal and ser  800 
3 cal    300 
4 cal    400 
5 ser    700 

在这里,我需要的resul按ID和总金额和concat字符串名称相同的ID和不同的名称

回答

7

这将与sql-server 2008一起使用

SELECT p1.ID, 
     (SELECT NAME + ' and ' 
      FROM YourTable p2 
      WHERE p2.ID = p1.ID 
      ORDER BY NAME 
      FOR XML PATH('')) AS Name, 
     sum(Amount) 
     FROM YourTable p1 
     GROUP BY ID ; 
2
SELECT id, GROUP_CONCAT(DISTINCT name SEPARATOR ' and ') AS name, SUM(amount) AS amount 
FROM mytable 
GROUP BY id 
+0

对不起,但我找不到在sql server中的GROUP_CONCAT ..我想这在sql server 2008 r2 – 2012-04-10 06:54:46

+1

啊,对不起 - 这是MySQL。我没有阅读标签。 – Amadan 2012-04-10 07:14:01

2
SELECT p1.ID, 
    STUFF((SELECT ' and ' + NAME 
     FROM YourTable p2 
     WHERE p2.ID = p1.ID 
     ORDER BY NAME 
     FOR XML PATH('')) 
    , 1, 5, '') AS Name, 
    sum(Amount) 
    FROM YourTable p1 
    GROUP BY ID 

从维克拉姆答案
我添加stuff我的结果。