Одним из способов является использование двух взаимосвязанных подзапросов:
SELECT ID,ColA,ColB,
(SELECT ColC FROM table y
WHERE x.id = y.id AND ColA IS NULL) As ColC,
(SELECT ColD FROM table y
WHERE x.id = y.id AND ColA IS NULL) As ColD
FROM table x
WHERE ColA IS NOT NULL
Другой способ - использовать самостоятельное соединение
SELECT x.ID,x.ColA,x.ColB,
y.ColC,y.ColD
FROM table x
JOIN table y
ON x.ID = y.ID AND x.ColA IS NOT NULL AND y.ColA IS NULL
EDIT
Если для определенного идентификатора только одна строка с ненулевым значением ColA
Полагаю, вы имеете в виду, что строки с ColA = NULL вообще нет для определенного идентификатора.
В этом случае первый запрос будет работать, а второй запрос должен использовать LEFT JOIN:
SELECT x.ID,x.ColA,x.ColB,
y.ColC,y.ColD
FROM table x
LEFT JOIN table y
ON x.ID = y.ID AND x.ColA IS NOT NULL AND y.ColA IS NULL
или строка, имеющая только ноль ColA
В этом случае условие должно быть расширено с помощью подзапроса NOT EXISTS:
SELECT ID,ColA,ColB,
(SELECT ColC FROM table y
WHERE x.id = y.id AND ColA IS NULL) As ColC,
(SELECT ColD FROM table y
WHERE x.id = y.id AND ColA IS NULL) As ColD
FROM table x
WHERE ColA IS NOT NULL
OR NOT EXISTS (
SELECT 1 FROM table z
WHERE x.id = z.id AND z.ColA IS NOT NULL
)
SELECT x.ID,x.ColA,x.ColB,
y.ColC,y.ColD
FROM table x
LEFT JOIN table y
ON x.ID = y.ID AND y.ColA IS NULL
WHERE x.ColA IS NOT NULL
OR NOT EXISTS (
SELECT 1 FROM table z
WHERE x.id = z.id AND z.ColA IS NOT NULL
)