У меня есть таблица с некоторыми «функционально повторяющимися» записями - разные идентификаторы, но 4 столбца «пользовательских данных» (еще больше столбцов) идентичны. У меня есть запрос, который будет выбирать все записи с такими дубликатами.SQL два критерия из одной группы:
Теперь я хочу выбрать, из каждой группы дубликатов, сначала любой из них, у которых есть столбец A
, не является нулевым - и я проверял данные, что на каждую группу не более 1 таких строк, и если есть нет в этой конкретной группе, то минимум столбца ID
.
Как выбрать это? Я не могу точно использовать неагрегат в THEN of CASE и агрегат в ELSE. Например. это не работает:
SELECT CASE
WHEN d.A IS NULL THEN d.ID
ELSE MIN(d.ID) END,
d.B,
d.C,
d.E,
d.F
FROM TABLE T
JOIN (my duplicate query here) D ON T.B=D.B
AND T.C=D.C
AND T.E=D.E
AND T.F=D.F
GROUP BY T.B,
T.C,
T.E,
T.F
Ошибка существо:
колонка А должен появиться в GROUP BY оговорки или использоваться в агрегатной функции.
Возможно, «COALESCE (MIN (CASE, КОГДА d.A НЕ НЕВЕРНО, ТО ЧЕМ d.ID ELSE NULL END), MIN (D.ID))'? Он рассматривает D.ID только в том случае, если D.A не является нулевым; если ни один не найден, будет возвращен min (d.id). –
Отлично! Опубликуйте как ответ, и я соглашусь. Благодаря! – Kev