Necesito escribir una declaración de selección que reescriba la tabla de la siguiente manera... No estoy seguro de cómo hacerlo usando MySQL.
ejemplo de tabla
user_id date abc 123456 2020-01-01 1 1 1 234567 2020-03-04 1 0 0 453576 2020-05-05 1 0 1Resultado deseado
user_id date results 123456 2020-01-01 a 123456 2020-01-01 b 123456 2020-01-01 c 234567 2020-03-04 a 453576 2020-05-05 a 453576 2020-05-05 cEn MySQL puede descentrar con union all , mientras filtra en 1 valores:
select user_id, date, 'a' as result from mytable where a = 1 union all select user_id, date, 'b' from mytable where b = 1 union all select user_id, date, 'c' from mytable where c = 1 order by user_id, date, resultSi tiene una gran cantidad de datos o su "tabla" es realmente una consulta compleja (por ejemplo, una subconsulta o una vista), entonces la anulación de la dinámica suele ser más rápida con cross join que con union all :
select t.user_id, t.date, r.result from t cross join (select 'a' as result union all select 'b' as result union all select 'c' as result ) r where (ta = 1 and r.result = 'a') or (tb = 1 and r.result = 'b') or (tc = 1 and r.result = 'c') ;Para una sola mesa pequeña, el rendimiento probablemente no importe.