根据其他行填充SQL列

时间:2015-06-02 07:05:28

标签: sql

如果此问题可能已在其他地方发布,请道歉,尽管我已经搜索过但无法找到答案。基本上我有下表(会有额外的行,但这些是主要的);

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

作为select语句的一部分,我需要添加一个填充名称的附加列,即使在名称列中没有提到它;

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无法正常工作,因为我需要显示所有记录。

谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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