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
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
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
Lütfen son virgülünü kaldırın. – 1000111
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 –
Üç 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. –
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 .
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. –
sadece üç dize ... –
Sadece örnek tablonuz beş farklı 'dize 'değerini gösterir. Lütfen açıkla. –