2015-06-02 4 views
-1

Извините, если этот вопрос, возможно, был отправлен в другом месте, хотя я искал и не смог найти ответ. В основном у меня есть следующая таблица (были бы дополнительные строки, но они являются основными);Заполнение столбца SQL на основе других строк

emp_id | Name 
------------- 
    1  a 
    1 
    2  b 
    2 
    3  c 
    4  d 
    4 
    4 

как часть оператора выбора, я должен был бы добавить дополнительный столбец, который заполнит имя, даже в случае, если он не упоминается в колонке имени;

emp_id | Name | SortList 
------------------------ 
    1  a  a 
    1    a 
    2  b  b 
    2    b 
    3  c  c 
    4  d  d 
    4  d  d 

У меня возникло ощущение, что мне может понадобиться сделать другой оператор select как столбец. Но не уверен, как это сработает. Также просто отметить, что GROUP BY не будет работать, так как мне нужно будет отображать все записи.

Спасибо!

+1

Какие СУБД вы используете? Postgres? Oracle? –

ответ

0

Используйте коррелированный подзапрос, чтобы найти Имя, если оно не указано.

select emp_id, Name, coalesce(name, (select min(Name) from tablename t2 
            where t1.emp_id = t2.emp_id)) as SortList 
from tablename t1 

Обратите внимание, что это будет работать, даже если emp_id имеет разные Имена в разных строках.

В качестве альтернативы, сделать автообъединение:

select t1.emp_id, t2.Name, t2.Name as SortList 
from tablename t1 
    join (select emp_id, Name from tablename 
     where name is not null) t2 on t1.emp_id = t2.emp_id 
+0

Спасибо! Решение coalesce - это то, чем я был, особенно, поскольку он намного более устойчив в работе с разными именами. Похоже, у меня есть некоторые чтения, чтобы сделать эту функцию! – DCamel

0

Что-то подобное может работать: Fiddle

SELECT t1.emp_id, t1.name, t2.name as "Sortlist" 
FROM mytable t1 
join 
(SELECT name, emp_id 
from mytable 
where name is not null) t2 
ON t1.emp_id = t2.emp_id 

AFAIK это должно работать для любых RDBMS

+0

Я не знал, что, извините, написал много jquery и php последние пару недель, он работал на скрипке, поэтому я просто предполагал, что он работает в любых rdmbs, отредактировал его –