假设您是一家企业的员工,他们将员工放入数据库,其中包含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
基本上省略了为每个更改姓氏重复不变信息的需要,以便在将其输出到网站时制作更好的列表。
答案 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'