Мне нравится ответ Томалака, но я почему-то скептически отношусь к тому, что он выполнит NOT EXISTS
для каждой строки в таблице, а не для каждого отдельного ParentId, поэтому, когда группы большие, он будет медленнее, чем необходимо.
В этом случае ответ Габи будет лучше, в сочетании с индексом DataValue и индексом ParentId.
Просто для удовольствия, как насчет:
SELECT R.Id, R.ParentId, R.DataValue FROM (
SELECT DISTINCT ParentId FROM YourTable
EXCEPT SELECT DISTINCT ParentId FROM YourTable WHERE DataValue = 'A'
) L
LEFT JOIN YourTable R ON R.ParentId = L.ParentId
(Также с одним индексом для DataValue и одним индексом для ParentId)