-2

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

4 回答 4

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)
于 2013-07-17T19:19:09.327 回答
0

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

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

然后你可以做类似的事情

SELECT * FROM users
JOIN lastNames on users.id = lastNames.user_id;
于 2013-07-17T19:06:15.973 回答
0

Just use the unique keyword

SELECT distinct firstName from ------ where ------
于 2013-07-17T19:11:53.890 回答
0

只是

select lastname from table where firstname ='SOMEONE'     

那么您将获得所有三个姓氏。唯一的 id 和 firstname 呢?这是关于您如何进行报告,而不是查询。

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

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

最好只是

select id, firstname, lastname from table where firstname='SOMEONE'
于 2013-07-18T11:23:51.040 回答