Om du vill få en rad med två kolumner när det finns två kolumner som inte är noll, och 1 om det bara finns en, måste du skapa din fråga dynamiskt.
Om du alltid vill ha 1 kolumn där varje rad innehåller ett icke-nullvärde kan du göra det med en union.
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 = ?
Om du vill kunna veta från vilka kolumner värdena kommer kan du göra något så här:
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 = ?
Obs:union tar också bort dubbletter av resultat. Om du vill behålla dubbletter, använd UNION ALL
.