2013-07-16 54 views
-1
t_no name value 
1 a  45 
1 b  23 
1 c  5 
1 a  12 
1 b  99 
1 c  6 

我需要證明我上面的表作爲如何在列組重複行值

no name value1 value2 
1 a 45  12 
1 b 23  99 
1 c 5  6 
+4

這就是所謂的透視表,但你無法在您的示例中執行此操作,因爲您沒有明確的標準來確定哪個值屬於哪個列。 「First」在關係數據庫中沒有意義,因爲集合沒有隱含的順序。 –

回答

1

不能在MySQL創建單獨動態列,無論是在腳本語言,也可以使用GROUP_CONCAT讓他們在一列:

SELECT to_no, name, GROUP_CONCAT(value) 
    FROM table GROUP BY to_no, name 

結果:

no name value 
1 a 45,12 
1 b 23,99 
1 c 5,6 
+0

謝謝你。需要在列中列出重複的數據。我們可以嘗試在存儲過程 – user2587477

+0

中查找可以添加的副本,在GROUP BY ...之後,具有count(*)> 1 – Marek

0

MySQL沒有透視功能,但您可以使用具有CASE表達式的聚合函數。既然你有多個值的每個t_noname,那麼你可以使用用戶定義的變量行號分配給每個組的值:

select t_no, name, 
    max(case when rn=1 then value end) value1, 
    max(case when rn=2 then value end) value2 
from 
(
    select t_no, name, value, 
    @rn:=case when @prev=t_no and @c=name then @rn else 0 end +1 rn, 
    @prev:=t_no, 
    @c:=name 
    from yourtable 
    cross join (select @rn:=0, @prev:=0, @c:=null) c 
    order by t_no, name 
) d 
group by t_no, name 
order by t_no, name; 

SQL Fiddle with Demo