我有下表:
ID | source | Name | Age | ... | ...
1 | SQL | John | 18 | ... | ...
2 | SAP | Mike | 21 | ... | ...
2 | SQL | Mike | 20 | ... | ...
3 | SAP | Jill | 25 | ... | ...
我希望每个ID都有一条记录。这背后的想法是,如果 ID 仅出现一次(无论来源如何),则将记录该记录。但是,如果1个ID有2条记录,则此处使用包含SQL作为源的记录。
所以,在这种情况下,结果将是:
ID | source | Name | Age | ... | ...
1 | SQL | John | 18 | ... | ...
2 | SQL | Mike | 20 | ... | ...
3 | SAP | Jill | 25 | ... | ...
我通过分区(按源 desc 排序)来完成此操作,但如果有一天添加第三个源,则效果不佳。
还有其他选择/想法吗?
最简单的方法(在我看来)是使用具有排名功能的 CTE:
with cte as
(
select ID, source, Name, Age, ... ,
rn = row_number() over (partition by ID order by case when source = 'sql'
then 0 else 1 end asc)
from dbo.tablename
)
select ID, source, Name, Age, ...
from cte
where rn = 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)