Это все разные столбцы, поэтому вам нужен CASE для каждого.
CASE WHEN name = 'John' AND surname = 'BBBB' THEN XYZ END AS surname
CASE WHEN name = 'John' AND surname = 'CCCC' THEN XYZXYZ END AS second_surname
CASE WHEN name <> 'John' AND surname = 'BBBB' THEN ABCDEF END AS third_surname
CASE WHEN name <> 'John' AND surname = 'CCCC' THEN ABCDEFABCDEF END AS fourth_surname
Если вам нужен один столбец, тогда будет работать ответ типа @TimBiegeleisen.
Как указывает @MTO, мой не обрабатывает нули. Это решило бы это
CASE WHEN COALESCE(name,'Not John') <> 'John' AND surname = 'BBBB' THEN ABCDEF END AS third_surname
CASE WHEN COALESCE(name,'Not John') <> 'John' AND surname = 'CCCC' THEN ABCDEFABCDEF END AS fourth_surname