Мы можем использовать оператор UNION ALL
set для объединения результатов нескольких запросов.
Мы могли бы выполнить операцию JOIN
, чтобы получить четыре строки из каждой строки в таблице. Как то так:
SELECT t.user_id
, q.category AS `Category`
, CASE q.category
WHEN 'Family' THEN t.family
WHEN 'Friend' THEN t.friend
WHEN 'Roommate' THEN t.roommate
WHEN 'College' THEN t.college
END AS `Value`
FROM data_1 t
CROSS
JOIN ( SELECT 'Family' AS category
UNION ALL SELECT 'Friend'
UNION ALL SELECT 'Roommate'
UNION ALL SELECT 'College'
) q
ORDER
BY t.user_id
, q.category='College'
, q.category
Или мы могли бы сделать что-то вроде этого:
( SELECT t1.user_id
, 'Family' AS `Category`
, t1.family AS `Value`
FROM data_1 t1
)
UNION ALL
( SELECT t2.user_id
, 'Friend'
, t2.friend
FROM data_1 t2
)
UNION ALL
( SELECT t3.user_id
, 'Roommate'
, t3.roommate
FROM data_1 t3
)
UNION ALL
( SELECT t4.user_id
, 'College'
, t4.college
FROM data_1 t4
)
ORDER BY user_id, `Category`='College',`Category`