Możesz użyć poniższego „techniki”
Pierwsze uruchomienie zapytania nr 1. Generuje zapytanie (zapytanie nr 2), które musisz uruchomić, aby uzyskać pożądany wynik. Proszę, nadal bierz pod uwagę komentarze Mosha, zanim przejdziesz „dziko” z tysiącami kategorii :o)
Zapytanie nr 1:
SELECT 'select UserID, ' +
GROUP_CONCAT_UNQUOTED(
'sum(if(category = "' + STRING(category) + '", 1, 0)) as ' + STRING(category)
)
+ ' from YourTable group by UserID'
FROM (
SELECT category
FROM YourTable
GROUP BY category
)
Wynik będzie taki jak poniżej - Zapytanie nr 2
SELECT
UserID,
SUM(IF(category = "A", 1, 0)) AS A,
SUM(IF(category = "B", 1, 0)) AS B,
SUM(IF(category = "C", 1, 0)) AS C
FROM
YourTable
GROUP BY
UserID
oczywiście dla trzech kategorii - możesz to zrobić ręcznie, ale dla tysięcy to na pewno będzie dla ciebie dzień!!
Wynik zapytania nr 2 będzie wyglądał zgodnie z oczekiwaniami:
UserID A B C
1 1 1 0
2 0 0 1
3 1 1 1