Поскольку вам, кажется, нужно минимальное значение идентификатора для «xx», исходные значения идентификатора для «yy» и максимальное значение идентификатора для «zz» ( edit : хотя теперь я вижучто есть только одна запись для 'zz', так что это может быть MIN вместо MAX, или это может быть неагрегировано), не ясно, что мы можем действительно обобщить для вас.
SELECT MIN(ID) AS ID, Name
FROM AnonymousTable
WHERE Name = 'xx'
GROUP BY Name
UNION
SELECT ID AS ID, Name
FROM AnonymousTable
WHERE Name = 'yy'
UNION
SELECT MAX(ID) AS ID, Name
FROM AnonymousTable
WHERE Name = 'zz'
GROUP BY Name
Это подходитданные приведены в вопросе.У вас также может быть UNION с двумя ветвями, где «yy» и «yy» обрабатываются по-разному.
Возможно, вы сможете использовать вычисляемый столбец в более определенном, более систематическом сценарии:
SELECT CASE Name WHEN 'yy' THEN ID ELSE 1 END AS Pseudo_ID, Name -- , COUNT(*) AS number
FROM AnonymousTable
GROUP BY Pseudo_ID, Name
Обычно вы используете некоторую статистическую функцию (например, COUNT) в списке выбора, чтобы оправдать предложение GROUP BY;в противном случае вы можете использовать простой DISTINCT для устранения дубликатов.