我有一个看起来像这样的表:
1 | 'Frank' | 'A'
2 | 'Frank' | 'B'
3 | 'Tom' | 'A'
4 | 'Tom' | 'B'
我想要一个看起来像这样的输出:
Frank | A |乙
汤姆| A |乙
我想出了这个:
SELECT N.Name, N.Surname, M.Surname
FROM NAMES N, NAMES M
WHERE N.Surname = 'B' AND M.Surname = 'A'
GROUP BY N.Name;
这似乎有效,但我不知道在FROM子句中使用同一个表两次是否是一个好习惯,或者在大型表上性能会受到影响。
是否有更简单的解决方案?
答案 0 :(得分:0)
在from
后面放置多个表格是老式的:您可以使用标准join
语法使on
更具可读性:
from Names n
join Names m
on n.name = m.name
限制条件下的自我加入并不太昂贵。 Name
是一个相当严格的条件:只有2条记录将共享该名称。
您可以在支持row_number()
的数据库中更有效地编写它。这使您可以在没有join
的情况下运行查询:
select Name
, max(case when rn = 1 then Surname end) as Surname1
, max(case when rn = 2 then Surname end) as Surname2
, max(case when rn = 3 then Surname end) as Surname3
from (
select row_number() over(
partition by Name
order by Surname) as rn
, Name
, Surname
from YourTable
) SubQueryAlias
group by
Name