2015-04-20 2 views
3

Нужно для моей программы 4gl:
Предположим, у меня есть таблица, которая содержит номер телефона и имя. Могут быть 2 человека с одним и тем же номером телефона или 2 имени с 1 номером телефона.
Мне нужно выбрать только 1 номер телефона в таблице.
я сделал:Выберите 2 отдельных столбца в 4GL

SELECT DISTINCT phone_number, last_name FROM table 

Результаты покажут 2 записей. Даже номер телефона тот же, поскольку имена разные, он больше не уникален. Как я могу получить уникальный номер телефона, независимо от его last_name? (Но я хочу, чтобы получить фамилию, а я не забочусь, который один.)

ответ

5

DISTINCT, как вы «заметили, вернут строки, которые различны во всей их полноте.

Похоже, что вы ищете что-то вроде group by. По существу, GROUP BY phone_number вернет одну строку для каждого номера телефона. Поскольку вы также хотите получить last_name, вам нужно указать базу данных, как вы хотите ее вернуть. Вы сказали, что вы не заботитесь, которые так что вы могли бы просто написать:

SELECT phone_number, MAX(last_name) as last_name 
FROM table 
GROUP BY phone_number 

Informix также поддерживает FIRST_VALUE агрегатную функцию, хотя я использовал только, что в OLAP ситуациях, так что я не помню, если он будет работать в этом контекст.

3

Если вы не заботитесь какую фамилию, а затем попробовать это:

SELECT phone_number, 
     MAX(last_name) AS last_name 
FROM table 
GROUP BY phone_number 
+1

Не собираюсь понижать, но этот вопрос помечен informix, поэтому я сомневаюсь, что TSQL будет работать. –

+0

haha ​​Я думал, что положил t-sql для поиска. Виноват. – Stephan

+1

Бывает, я тоже это сделал. MSSQL - это моя БД выбора –