Во-первых, получите только те строки, которые могут быть полезны:
SELECT *
FROM t
WHERE (idx = 0 AND location IS NOT NULL)
OR idx = 1;
key location idx
---------- ---------- ----------
01 1-01 0
01 1-02 1
02 2-02 1
03 1
Затем используйте группирование, чтобы вернуть только одну строку для каждого ключа. Если имеется две строки таблицы, вам нужна строка с меньшим значением idx
, поэтому используйте MIN (), чтобы выбрать ее:
SELECT key, location, MIN(idx) AS idx
FROM t
WHERE (idx = 0 AND location IS NOT NULL)
OR idx = 1
GROUP BY key;
key location idx
---------- ---------- ----------
01 1-01 0
02 2-02 1
03 1