如何省略重复结果

时间:2013-07-17 19:03:17

标签: sql postgresql

假设您是一家企业的员工,他们将员工放入数据库,其中包含ID,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 

基本上省略了为每个更改姓氏重复不变信息的需要,以便在将其输出到网站时制作更好的列表。

4 个答案:

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

从您的问题中不清楚相同的ID是否始终具有相同的名字,在这种情况下,使用单个窗口定义可以更简单地编写它:

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)

答案 1 :(得分:0)

一方面,ID应该是标识符,唯一

如果一个人有多个姓氏,你应该有一些连接表,其中包含你可以进行连接查询的所有其他姓氏。

然后你可以做一些像

这样的事情
SELECT * FROM users
JOIN lastNames on users.id = lastNames.user_id;

答案 2 :(得分:0)

只需使用唯一关键字

即可
SELECT distinct firstName from ------ where ------

答案 3 :(得分:0)

只是

select lastname from table where firstname ='SOMEONE'     

然后你将得到所有三个姓氏。 那个唯一的id和名字怎么样? 这是关于你如何进行报告,而不是查询。

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

但那将是两次访问数据库。

更好的只是

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