Опираясь на идею Тьямина, вы можете использовать предложение where
, в котором говорится, что язык текущей строки - лучший язык для группы:
select value
, language
, externID
from YourTable t1
where case language when 'English' then 3 when 'default' then 2 else 1 end =
(
select max(case language when 'English' then 3
when 'default' then 2 else 1 end)
from YourTable t2
where t1.value = t2.value
and t1.language = t2.language
and t1.externID = t2.externID
)
group by
value
, language
, externID
Чтобы не возвращать строки, если не найден ни определенный язык, ни значение по умолчанию, используйте:
case language when 'English' then 3 when 'default' then 2 else null end
Поскольку null = null
не соответствует действительности, это не будет соответствовать предложению where.
Для универсальной версии, которая предпочитает любой язык по умолчанию, используйте:
case language when 'default' = 1 else 2 end
Эта ставка по умолчанию ниже всего остального.