2017-05-29 69 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

相關問題