2016-04-05 29 views
1

Temelde benim sorumnasıl yeni dize sütun almak için mysql tarafından grup kullanmak

id sid string 
    5 1 AAA 
    6 1 BBB 
    7 2 CCC 
    8 3 ZZZ 
    9 3 EEE 

gibi çıktı elde etmektir bu GroupBy sid

+0

Kaç tane "string" değeri var? Sayı sınırlı ise, basit bir pivot sorgu çalışmalıdır. Değilse, o zaman dinamik SQL'e ihtiyacınız olacak. –

+0

sadece üç dize ... –

+0

Sadece örnek tablonuz beş farklı 'dize 'değerini gösterir. Lütfen açıkla. –

cevap

0

aşağıdaki Pivot sorgu deneyin

sid str1 str2 
1  AAA BBB 

:

SELECT t.sid, 
    CASE WHEN t.str1 > 0 THEN 'AAA' ELSE NULL END AS str1, 
    CASE WHEN t.str2 > 0 THEN 'BBB' ELSE NULL END AS str2, 
    CASE WHEN t.str3 > 0 THEN 'CCC' ELSE NULL END AS str3 
FROM 
(
    SELECT t.sid, 
     SUM(CASE WHEN t.string = 'AAA' THEN 1 ELSE 0 END) AS str1, 
     SUM(CASE WHEN t.string = 'BBB' THEN 1 ELSE 0 END) AS str2, 
     SUM(CASE WHEN t.string = 'CCC' THEN 1 ELSE 0 END) AS str3 
    FROM yourTable t 
    GROUP BY t.sid 
) t 
+1

Lütfen son virgülünü kaldırın. – 1000111

+0

Ama benim 3 dizeler varsayılan olmayabilir ... örnek abc veya xyz veya wss veya başka bir şey olarak gelecektir ama tek sid için sadece rastgele 3 dizeleri alırsınız –

+0

Üç rastgele _characters_ veya üç rastgele _strings_ (yani karakter koleksiyonları)? Dizeyi bilmiyorsanız, muhtemelen yukarıda belirtilen dinamik SQL kullanmanız gerekecektir. Her neyse, bunu şimdilik bırakacağım. –

0

I d hatta mümkünse anında yeni sütunlar oluşturmak için, ancak uygulama mantığında Sonra GROUP_CONCAT

SELECT sid, GROUP_CONCAT(`string` SEPARATOR ',') AS string_cols FROM t GROUP BY sid 

ile benzer bir sonuç alabilir biliyorum on't, birden alanlara SEPARATOR tarafından string_cols bölmek gerekir .