Можете да използвате по-долу "техника"
Първо стартиране на заявка №1. Той произвежда заявката (заявка №2), която трябва да изпълните, за да получите нужния ви резултат. Моля, все пак помислете за коментарите на Mosha, преди да станете „диви“ с хиляди категории :o)
Заявка №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
)
Резултатът ще бъде като по-долу - Заявка №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
разбира се за три категории - можете да го направите ръчно, но за хиляди това определено ще ви помогне!!
Резултатът от заявка №2 ще изглежда както очаквате:
UserID A B C
1 1 1 0
2 0 0 1
3 1 1 1