2013-07-17 5 views
-2

Предположим, вы являетесь сотрудником в бизнесе, где они кладут сотрудников в базу данных, с столбцом ИД, FIRSTNAME, LASTNAME. Теперь, если у вас есть несколько фамилий, то, что SQL метод вы используете, чтобы изменить вывод из этого:Как отказаться от повторных результатов

ID   FIRST NAME  LASTNAME 
1    James   Bond 
1    James   Carnegie 
1    James   Rockefeller 

Для этого:

ID   FIRST NAME  LASTNAME 
1    James   Ferguson 
           Carnegie 
           Rockefeller 

В основном опуская необходимости повторять не-изменяющуюся информацию для каждого изменения фамилии, чтобы сделать лучший список при выводе его на веб-сайт.

+2

Можете ли вы опубликовать SQL, которую вы используете? – PaulProgrammer

+2

Надеемся, что все эти записи не имеют одинакового идентификатора. –

+1

Я не думаю, что вы можете это сделать, как вы описали. (Академическая причина - вывод SELECT-запроса - это отношение, и отношение должно иметь одинаковое количество столбцов в каждой строке) –

ответ

0

Ну за одно идентификатор должен быть идентификатором и уникального

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

Тогда вы можете просто сделать что-то вроде

SELECT * FROM users 
JOIN lastNames on users.id = lastNames.user_id; 
+0

Правильно, но дело в том, что в этой гипотетической постановке этот человек имеет это один ID, один FIRSTNAME, но несколько LASTNAMES. Как я могу напечатать его имя и идентификатор один раз, рядом со списком всех полей LASTNAME, которые соответствуют его идентификатору? – UndefinedReference

+1

@navlag использовать группу по ... но, пожалуйста, пожалуйста .... Идентификаторы должны быть уникальными ... – Neal

+0

, но это тот же человек. – UndefinedReference

0

Просто используйте уникальное ключевое слово

SELECT distinct firstName from ------ where ------ 
+0

, но что, если это тот же человек с тем же ID, но у него просто несколько фамилий. Как я могу вернуть все его фамилии, не возвращая свое имя несколько раз? – UndefinedReference

+0

Форма SQL-стандарта будет 'SELECT DISTINCT ...' –

1
select case 
      when row_number() over (partition by id order by id) = 1 then id 
      else null 
     end as id, 
     case 
      when row_number() over (partition by firstname order by id) = 1 then firstname 
      else null 
     end as firstname, 
     lastname 
from the_table 
order by id, firstname 

Это не ясно из вашего вопроса, если же идентификатор всегда имеет один и тот же ПгвЬЫат, в в этом случае его можно было бы написать немного проще с использованием определения одного окна:

select case 
      when row_number() over id_window = 1 then id 
      else null 
     end as id, 
     case 
      when row_number() over id_window = 1 then firstname 
      else null 
     end as firstname, 
     lastname 
from the_table 
order by id, firstname 
window id_window as (partition by id order by id) 
+0

Правильно, скажем, есть один человек, у которого есть ID, и этот идентификатор также вызывает только одно имя (Стив), но идентификатор также привязан к нескольким последним имена (все, о чем вы можете подумать). Когда я верну его идентификатор, имя и фамилию, его идентификатор и имя появятся для каждого значения последнего имени с этим ассоциативным идентификатором. Но это делает его похожим на то, что у него есть несколько человек, а не один человек со многими, многими фамилиями. – UndefinedReference

+0

@navlag: вы должны обновить свой вопрос, чтобы включить эти комбинации в свои данные образца и вывода. Но похоже, что мой первый запрос будет делать то, что вы хотите. –

0

Просто

select lastname from table where firstname ='SOMEONE'  

, то вы получите все три LastName. Как насчет единственного идентификатора и имени? Речь идет о том, как вы делаете отчет, а не запрос.

select id, firstname from table where firstname ='SOMEONE' 

, но тогда это будет две поездки в базу данных.

Лучше всего

select id, firstname, lastname from table where firstname='SOMEONE' 
Смежные вопросы