Si desea obtener una fila con dos columnas cuando hay dos columnas no nulas, y 1 si solo hay una, debe crear dinámicamente su consulta.
Si desea tener siempre 1 columna donde cada fila contenga un valor no nulo, puede hacerlo con una unión.
SELECT a FROM tbl WHERE a IS NOT NULL AND id = ?
UNION
SELECT b FROM tbl WHERE b IS NOT NULL AND id = ?
UNION
SELECT c FROM tbl WHERE c IS NOT NULL AND id = ?
Si desea saber de qué columnas provienen los valores, puede hacer algo como esto:
SELECT 'col a' AS ColName, a FROM tbl WHERE a IS NOT NULL AND id = ?
UNION
SELECT 'col b', b FROM tbl WHERE b IS NOT NULL AND id = ?
UNION
SELECT 'col c', c FROM tbl WHERE c IS NOT NULL AND id = ?
Nota:la unión también elimina los resultados duplicados. Si desea mantener duplicados, use UNION ALL
.