2017-05-29 44 views
1

我想创建这张表并在我的报告中使用它。如何将同一列中的不同值组合到一列中?

我有这样的一个表:

-------------------------------------- 
sum   commodity   unit 
-------------------------------------- 
100   a4 paper   x 
200   a5 paper   y 
    7   a4 paper   z 
410   pencil    e 
300   a5 paper   w 

如何从上表中创建这样一个表?

-------------------------------------- 
sum   commodity   unit 
-------------------------------------- 
107   a4 paper   x-z 
500   a5 paper   y-w 
410   pencil    e 
+3

的数据库/版本您使用的? – Utsav

+1

将另外一个A4纸行添加到样本数据中,并且不要忘记调整结果。 – jarlh

+0

我的数据库是sql服务器管理 –

回答

2

如果使用SQL Server意味着,使用下面的查询

CREATE TABLE table2(sums INT, commodity VARCHAR(100),unit VARCHAR(2)) 

INSERT INTO table2(sums , commodity ,unit) 
SELECT 100,'a4 paper','x' UNION ALL 
SELECT 200,'a5 paper','y' UNION ALL 
SELECT 7,'a4 paper','z' UNION ALL 
SELECT 410,'pencil','e' UNION ALL 
SELECT 300,'a5 paper','w' 

SELECT SUM(sums) , commodity , STUFF((SELECT '-' + unit FROM table2 I 
WHERE I.commodity = O.commodity FOR XML PATH('')),1,1,'') unit 
FROM table2 O 
GROUP BY commodity 
+0

tanx这个答案非常好 –

0

当你没有带提到你的RDBMS,你可以使用类似这样

select sum(sum), 
commodity, 
group_concat(unit SEPARATOR '-') from commo2 t 
group by commodity; 

GROUP_CONCAT在MySQL工作。您可以在RDBMS中搜索替代group_concat,就像在Oracle中一样,您可以使用LISTAGG代替。但逻辑是相同的

演示在MYSQL

http://rextester.com/ZXZA16316

+0

我的db是sqlserver –

+0

@ a.ali,你使用的是SQL server.Is上面的查询正在你的平台上工作。 – Mansoor

+0

为什么downvote? – Utsav

相关问题